我正在尝试使用负面的后置正则表达式,但我似乎无法让它在我的zshell中工作。我做错了吗?
回声“Nate or nate”| grep“(\?<!N)a”
这应与 nate 中的a
匹配,但 NOT Nate中的a
...对吧?
答案 0 :(得分:8)
当我想到前瞻性或后瞻性断言时,我想起了Perl。您需要使用perl-regexp和单引号来查找a
中的nate
:
echo "Nate or nate" | grep -P '(?<!N)a'
答案 1 :(得分:1)
它应该。但是,grep
会打印出匹配的任何行。
如果您希望grep
仅打印出匹配的部分内容,则应为其提供-o
选项。
答案 2 :(得分:0)
有许多不同的正则表达式,但grep的正则表达式应该如下所示:"(?<!N)a"
。
答案 3 :(得分:0)
首先,您要使用单引号(zsh中的双引号将尝试展开!N
),您可能需要扩展的regexen(grep -E
)。另外,根据您的grep版本,它可能根本不支持0宽度断言,请检查man 7 re_format
。