Regex 格雷普。不以“结束”结尾的文本行;“abcd”;?

Regex 格雷普。不以“结束”结尾的文本行;“abcd”;?,regex,sed,grep,Regex,Sed,Grep,您好,我正在寻找一个正则表达式:文本行不以某个单词结尾,假设它是“abcd” 起初我试着用 *[^abcd]$ 那当然不行。它与不以字母a、b、c或d结尾的行匹配。 因此,在高级Grep主题中,我找到了这个表达式,但无法使其工作: ^(?>*)(? grep-e“^(?>*)(?看看grep的-v选项 grep -v 'abcd$' 如果你的意思是“字符序列”,那么就使用 \b意思是“单词边界”试一试: grep -v "\<abcd\>$" grep-v“\$” 概念证明 $

您好,我正在寻找一个正则表达式:文本行不以某个单词结尾,假设它是“abcd”
起初我试着用
*[^abcd]$

那当然不行。它与不以字母a、b、c或d结尾的行匹配。
因此,在高级Grep主题中,我找到了这个表达式,但无法使其工作:
^(?>*)(?

grep-e“^(?>*)(?看看grep的-v选项

grep -v 'abcd$'
如果你的意思是“字符序列”,那么就使用

\b
意思是“单词边界”

试一试:

grep -v "\<abcd\>$"
grep-v“\$”
概念证明
$printf“%s\n”foo baz baz“foo bar baz”foo bar baz“foo bar baz”grep-v“\$”
富国酒吧
福吧巴扎酒店

注意:这将匹配整字,第三行返回,即使它包含
abcd
,因为最后4个字母

grep
在使用
-p
标志时支持PCRE正则表达式


原因之一是
grep-e“^(?>*)(?你从来没有接受过一个答案。你应该从@tobyodavies答案开始,这肯定是正确的。grep有一个非常基本的正则表达式引擎。我真诚地怀疑lookahead是否有效…@toby:grep的许多版本都支持使用
-P
的PCREflag@0verbose同意第一部分,但不同意第二部分。
abcd$
不会返回以
fooabcd
结尾的行,根据OP的requirements@SiegeX你说得对。我现在给你的是+1。因为在他的第一次尝试中,OP没有尝试匹配一个完整的单词,我不认为这是他真正想要的…使用“单词”在我的经验中,意味着一系列的字符实际上比它的真正含义更常见。。。
grep -v "\<abcd\>$"
$ printf "%s\n" "foo abcd bar baz" "foo bar baz abcd" "foo bar bazabcd" | grep -v "\<abcd\>$"
foo abcd bar baz
foo bar bazabcd
grep -P '(?<!log)$' < <inputfile>