在 bash 脚本中,从字符串中提取文本模式的简单方法是什么?
例如,我想X
在字符串末尾提取后跟 2 个数字?
=~
当您使用双方括号时,有一个漂亮的正则表达式运算符。捕获的组在$BASH_REMATCH
阵列中可用。
if [[ $STRING =~ (X[0-9]{2})$ ]]; then
echo "matched part is ${BASH_REMATCH[1]}"
fi
让我们将您的输入作为
输入.txt
ASD123
GHG11D3456
FFSD11dfGH
FF87SD54HJ
我想找到的模式是“SD[digit][digit]”
代码
grep -o 'SD[0-9][0-9]' Input.txt
输出
SD12
SD11
SD54
如果你想在脚本中使用它......那么你可以在变量/数组中分配上面的代码......这取决于你的需要。
$ 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
您还可以使用参数扩展:
V="abcX23"
PREFIX=${V%%X[0-9][0-9]} # abc
SUFFIX=${V:${#PREFIX}} # X23
我需要从这个字符串中提取主机端口: NIC 1 Rule(0): name = guestsh, protocol = tcp, host ip = , host port = 2222, guest ip = , guest port = 22
该字符串是通过使用获得的: vboxmanage showvminfo Mojave | grep 'host port',我的意思是被过滤了,我需要提取主机端口中的任何数字;在这种情况下是 2222 但它可以不同。