我试图在文本中匹配以下任何模式可能性:
(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
答案 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}在+
)+
- 见上文]
- 文字 *
。