Regex 格雷普。不以“结束”结尾的文本行;“abcd”;?
您好,我正在寻找一个正则表达式:文本行不以某个单词结尾,假设它是“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]$
那当然不行。它与不以字母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>