Linux中:"取某个字符串特定分隔符的前面或后面部分"

方法一:使用 shell 的字符串匹配语法

从右侧开始最长匹配后删除,返回左边剩余部分:var=${variable%%pattern}

从 右侧(也就是字符串的末尾) 开始,用 pattern 做 最长匹配,并把匹配到的内容删除,返回剩余左边的内容。

例如:从右侧开始最长匹配后删除,返回左边

NAME="master_replid:0b1a77d52e77f989511f150df857e6d8c7056067\r$"

# 从右到左,一直到冒号这里的内容都不要
key=${NAME%%:*}

从左侧开始最长匹配后删除,返回右边剩余部分:var=${variable##pattern}

从 左侧(也就是字符串的开头) 开始,用 pattern 做 最长匹配,删除匹配内容,返回剩余部分。

例如:从左侧开始最长匹配后删除,返回右边

NAME="master_replid:0b1a77d52e77f989511f150df857e6d8c7056067\r$"

# 从左到右,一直到冒号这里的内容都不要
key=${NAME%%:*}

注意:这里的 pattern 是一个通配符,非正则的元字符

通配符 作用
* 任意长度字符
? 单个字符
[abc] 匹配集合中任意一个字符
[0-9] 匹配数字

方法二:使用 cut 命令将字符串切割为若干份

sdtin | cut -d "只能分隔符"  -f 要取那一部分

例如:

NAME="master_replid:0b1a77d52e77f989511f150df857e6d8c7056067\r$"

key=$(echo $"NAME" | cut -d ':' -f 1)

方法三:使用 awk 命令来将字符串切割为若干份

stdin | awk -F '分隔符' '{print $n}'

例如:

NAME="master_replid:0b1a77d52e77f989511f150df857e6d8c7056067\r$"
KEY=echo "$NAME" | awk -F : '{print $1}' # master_replid

posted on 2025-11-17 17:51  一直小爪子  阅读(17)  评论(0)    收藏  举报