从字符串中提取模式

use*_*326 6 bash

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

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

Joh*_*ica 24

=~当你使用双方括号时,有一个漂亮的正则表达式运算符.捕获的组在$BASH_REMATCH阵列中可用.

if [[ $STRING =~ (X[0-9]{2})$ ]]; then
    echo "matched part is ${BASH_REMATCH[1]}"
fi
Run Code Online (Sandbox Code Playgroud)


Deb*_*tya 9

让我们把你的输入作为

INPUT.TXT

ASD123
GHG11D3456
FFSD11dfGH
FF87SD54HJ
Run Code Online (Sandbox Code Playgroud)

我想找到的模式是"SD [数字] [数字]"

grep -o'SD [0-9] [0-9]'Input.txt

产量

SD12
SD11
SD54
Run Code Online (Sandbox Code Playgroud)

如果你想在脚本中使用它...那么你可以根据你的需要在变量/数组中分配上面的代码.

  • **+1** - 我忘记了 `grep -o`。好的建议,尽管根据 OP 的问题,我怀疑最好包括:`grep -o 'X[0-9][0-9]$' input.txt` (2认同)

gho*_*oti 6

$ foo="abcX23"
$ echo "$(echo "$foo" | sed 's/.*\(X[0-9][0-9]\)$/\1/')"
X23
Run Code Online (Sandbox Code Playgroud)

要么

if [[ "$foo" =~ X[0-9][0-9]$ ]]; then
  echo "${foo:$((${#foo}-3))}"
fi
Run Code Online (Sandbox Code Playgroud)

  • 没有评论的downvote?我的回答如何虚假或误导? (4认同)