从字符串中提取模式

时间:2012-07-18 01:21:46

标签: bash

在bash脚本中,从字符串中提取文本模式的简单方法是什么?

例如,我想提取X后跟字符串末尾的2位数字?

5 个答案:

答案 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,但可以不同。