在bash脚本中,从字符串中提取文本模式的简单方法是什么?
例如,我想提取X
后跟字符串末尾的2位数字?
答案 0 :(得分:22)
使用double square brackets时,有一个漂亮的=~
正则表达式运算符。捕获的组在$BASH_REMATCH
数组中可用。
if [[ $STRING =~ (X[0-9]{2})$ ]]; then
echo "matched part is ${BASH_REMATCH[1]}"
fi
答案 1 :(得分:8)
让我们将您的输入视为
输入.txt
ASD123
GHG11D3456
FFSD11dfGH
FF87SD54HJ
我想找到的模式是“SD [数字] [数字]”
<强>代码强>
grep -o'SD [0-9] [0-9]'Input.txt
<强>输出强>
SD12
SD11
SD54
如果您想在脚本中使用它...那么您可以根据需要在变量/数组中分配上述代码......
答案 2 :(得分:6)
$ foo="abcX23"
$ echo "$(echo "$foo" | sed 's/.*\(X[0-9][0-9]\)$/\1/')"
X23
或
if [[ "$foo" =~ X[0-9][0-9]$ ]]; then
echo "${foo:$((${#foo}-3))}"
fi
答案 3 :(得分:2)
您还可以使用参数扩展:
V="abcX23"
PREFIX=${V%%X[0-9][0-9]} # abc
SUFFIX=${V:${#PREFIX}} # X23
答案 4 :(得分:0)
我需要从以下字符串中提取主机端口: NIC 1规则(0):名称= guestshsh,协议= tcp,主机ip =,主机端口= 2222,来宾ip =,来宾端口= 22
使用以下命令获取该字符串:vboxmanage showvminfo Mojave | grep'host port',我的意思是被过滤,我需要提取主机端口中的任何数字;在这种情况下为2222,但可以不同。