我正在尝试匹配一个字符,例如}
在 ac 文件中,但它不应该在引号之间,例如"}"
或"fdjskfhjds } 543897dhfhd92-()*&$"
. 如何使用 grep 形成正则表达式来执行此操作?
我现在返回 0 个匹配项的是:
grep '"[^"]* { [^"]*"'
这个想法是匹配“”之间的字符{。(我需要 not ^ 同时获得更多的双引号匹配)
如果使用其他标准 unix 工具可以更轻松地完成,欢迎使用解决方案!
使用环视断言
grep -P '(?!.*")\}(?!.*")'
下面的示例仅找到“more”和“blah”之间的“}”
echo 'blah"}"more}blah' | grep -P '(?!.*")\{(?!.*")'
假设您的版本grep
支持 PCRE,您可以说:
'(?<=[^"])}(?=[^"]?)'
例如,
$ echo 'foo}bar"}"baz}' | grep -P '(?<=[^"])}(?=[^"]?)'
foo}bar"}"baz}
^ ^ <== The carets denote the matched }