我尝试grep(递归)对一些文件/文件夹,但我的正则表达式在grep期间输出错误。语法:
grep
grep -a -r "^[a-zA-Z0-9_.+]+@[a-zA-Z0-9]+\.[a-zA-Z0-9.]+:+[a-zA-Z0-9\\\!|\[\]~<>{#}?\$%\^\&*\)\(+=._\-]+$" a.txt > b.txt
错误消息:
grep: Unmatched ) or \)
我试着通过切换一些")"来弄清楚它,但无济于事。任何帮助都很感激,谢谢:)
ee7vknir1#
这是因为\是转义字符,所以你需要额外的\来转义\本身。所以如果你想在正则表达式中用\转义(,你需要写\\(。
\
(
\\(
ff29svar2#
在基本的正则表达式中,元字符?,+,{,|、(、和)失去其特殊意义;而不是使用反斜线版本\?、+、{、|、\(和\)。传统的egrep不支持{元字符,而一些egrep实现支持(,所以可移植脚本应该避免在grep -E模式中使用(,并且应该使用[(]来匹配文字(。
[(]
2条答案
按热度按时间ee7vknir1#
这是因为
\
是转义字符,所以你需要额外的\
来转义\
本身。所以如果你想在正则表达式中用
\
转义(
,你需要写\\(
。ff29svar2#
在基本的正则表达式中,元字符?,+,{,|、(、和)失去其特殊意义;而不是使用反斜线版本\?、+、{、|、\(和\)。
传统的egrep不支持{元字符,而一些egrep实现支持(,所以可移植脚本应该避免在grep -E模式中使用(,并且应该使用
[(]
来匹配文字(。