如何使用正则表达式(扩展),grep和Bash

时间:2017-02-17 10:26:07

标签: regex bash grep

我试图在文本中匹配以下任何模式可能性:

(X)
( X )
(  X  )
(x)
( x )
(  x  )

其中“X”可以是任何单个字母数字字符(包括“*。+”),由任意数量的空格包围或根本不包含。

这是我到目前为止所得到的:

export A=$(cat <<'EOL'
subject     Re: [ATPC] Teste de eMailForm
> - - - - - - - -
> 1 ) QUEM SOU EU?
> (  ) Sou cervejeiro profissional
> ( X ) Sou um bebum nato, não ligo pra marca
> (  ) Sou exigente, bebo apenas artesanais
> - - - - - - - -
EOL
)

echo "$A" | grep -E "\( * \)"
#echo "$A" | grep -E "\(*^[[:space:]]*\)"

它返回:

> (  ) Sou cervejeiro profissional
> (  ) Sou exigente, bebo apenas artesanais

非常感谢您的帮助。

编辑:我希望从我的例子中得到这一行:

> ( X ) Sou um bebum nato, não ligo pra marca

2 个答案:

答案 0 :(得分:3)

使用grep和Perl正则表达式的强大功能:

echo "$A" | grep -P '\(\s*\S+\s*\)'

答案 1 :(得分:1)

如果您想在*内匹配1个或多个alphanuemric或.+(...)符号,则可以使用

grep -E "\( *[a-zA-Z0-9*.+]+ *\)"

如果括号内只有一个空格而不是空格,请在+后删除]

grep -E "\( *[a-zA-Z0-9*.+] *\)"

<强>详情:

  • \( - 匹配文字((因为-E启用了扩展正则表达式模式,(应该在其中转义以匹配文字{{1} })
  • ) - 0+个空格(可以替换为 *以匹配任何空格)
  • [[:space:]]* - 1个字母,可以是ASCII字母,数字,[a-zA-Z0-9*.+]*.(如果预计会出现1次或更多次,则添加{{1}在+
  • 之后
  • + - 见上文
  • ] - 文字 *