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
浙公网安备 33010602011771号