0%

bash中的字符串处理操作

本文记录了作者使用bash过程中,为了解决去除前缀后缀的问题而了解到的bash的字符串操作,简单来说

  1. string:position或者string:position:length进行子串提取
  2. string#pattern进行最短匹配前缀去除,string##pattern进行最长匹配前缀去除
  3. string%pattern进行最短匹配后缀去除,string%%pattern进行最长匹配后缀去除
  4. string/pattern/string进行首个pattern替换,string//pattern/string进行全部pattern替换
  5. 以上的pattern指的都是wildcard而不是regular expression

场景

有时在使用bash脚本的时候,希望对字符串做一些基本的操作,比如说去除前缀后缀(去除文件扩展名,统一前缀编号等),事实上,bash原生支持了许多字符串操作

bash 中的字符串操作

下面所有的pattern指的都是bash wildcard而不是regular expression

子串提取

使用string:position提取从position开始的子串

1
2
3
> string="text, dummy, text, dummy"
> echo ${string:3}
t, dummy, text, dummy

使用string:position:length提取从position开始,长度为length的子串

1
2
3
> string="text, dummy, text, dummy"
> echo ${string:3:4}
t, d

前缀去除

使用string#pattern进行最短匹配前缀去除

1
2
3
> string="text, dummy, text, dummy"
> echo ${string#*text}
, dummy, text, dummy

使用string##pattern进行最长匹配前缀去除

1
2
3
> string="text, dummy, text, dummy"
> echo ${string##*text}
, dummy

后缀去除

使用string%pattern进行最短匹配后缀去除

1
2
3
> string="text, dummy, text, dummy"
> echo ${string%dummy*}
text, dummy, text, y

使用string%%pattern进行最长匹配后缀去除

1
2
3
> string="text, dummy, text, dummy"
> echo ${string%%dummy*}
text,

字符串替换

使用string/pattern/string进行首个pattern的替换

1
2
3
> string="text, dummy, text, dummy"
> echo ${string/text/TEXT}
TEXT, dummy, text, dummy

使用string//pattern/string进行全部pattern的替换

1
2
3
> string="text, dummy, text, dummy"
> echo ${string//text/TEXT}
TEXT, dummy, TEXT, dummy

想要得到对正则表达式匹配替换的支持的话,可以使用sed命令