本文首发于我的Github博客
本文记录了作者使用bash过程中,为了解决去除前缀后缀的问题而了解到的bash的字符串操作,简单来说
string:position或者string:position:length进行子串提取string#pattern进行最短匹配前缀去除,string##pattern进行最长匹配前缀去除string%pattern进行最短匹配后缀去除,string%%pattern进行最长匹配后缀去除string/pattern/string进行首个pattern替换,string//pattern/string进行全部pattern替换- 以上的
pattern指的都是wildcard而不是regular expression
场景
有时在使用bash脚本的时候,希望对字符串做一些基本的操作,比如说去除前缀后缀(去除文件扩展名,统一前缀编号等),事实上,bash原生支持了许多字符串操作
bash 中的字符串操作
下面所有的pattern指的都是bash wildcard而不是regular expression
子串提取
使用string:position提取从position开始的子串
> string="text, dummy, text, dummy"
> echo ${string:3}
t, dummy, text, dummy
使用string:position:length提取从position开始,长度为length的子串
> string="text, dummy, text, dummy"
> echo ${string:3:4}
t, d
前缀去除
使用string#pattern进行最短匹配前缀去除
> string="text, dummy, text, dummy"
> echo ${string#*text}
, dummy, text, dummy
使用string##pattern进行最长匹配前缀去除
> string="text, dummy, text, dummy"
> echo ${string##*text}
, dummy
后缀去除
使用string%pattern进行最短匹配后缀去除
> string="text, dummy, text, dummy"
> echo ${string%dummy*}
text, dummy, text, y
使用string%%pattern进行最长匹配后缀去除
> string="text, dummy, text, dummy"
> echo ${string%%dummy*}
text,
字符串替换
使用string/pattern/string进行首个pattern的替换
> string="text, dummy, text, dummy"
> echo ${string/text/TEXT}
TEXT, dummy, text, dummy
使用string//pattern/string进行全部pattern的替换
> string="text, dummy, text, dummy"
> echo ${string//text/TEXT}
TEXT, dummy, TEXT, dummy
想要得到对正则表达式匹配替换的支持的话,可以使用sed命令
本文介绍了在bash中如何进行字符串处理,包括子串提取、前缀和后缀的最短与最长匹配去除,以及字符串的首个和全部替换。这些操作不依赖正则表达式,而是采用bash的wildcard方式。
542

被折叠的 条评论
为什么被折叠?



