我正在尝试对文件运行 grep 正则表达式,其中必须排除出现“00”和“0”的行。我想出了这个表达式:
grep -a -E \"stored\"\:\ \"\*123\*(?!00)[0-9]{2,5}\#\" $filename
但是当我尝试在 bash 中运行它时,我要么得到
-bash !00: event not found
,或者(我输入后set +H
),
-bash: syntax error near unexpected token
('`
请问我需要做什么才能在 bash 中正确地转义这个正则表达式?
答案1
由于您未对 进行转义,因此您会收到一条错误消息!
,这在 shell 中具有特殊含义。要将其用作 的模式参数的一部分grep
,您必须将其括起来或进行转义。
不需要逐个引用每个特殊字符,而是将整个模式括在单引号或双引号中(取决于您的目的),这样更方便,例如:
grep -a -P '"stored": "*123*(?!00)[0-9]{2,5}#"'
还请注意,我用 替换了-E
,-P
因为负向前瞻在扩展正则表达式(?!...)
的典型实现中不起作用。该标志启用 Perl 正则表达式,它应该支持这一点。grep
-P