Regex grep/awk:有条件地排除单词

Regex grep/awk:有条件地排除单词,regex,awk,grep,pcre,Regex,Awk,Grep,Pcre,我的数据格式如下: a cat a dog brown cat brown dog brown cow brown sheep brown fish a cat a dog brown dog a cat a dog brown dog 我想过滤掉所有以棕色开头的行,除了棕色的狗。有没有一种简单的方法可以用grep或awk实现这一点?我试着这样使用克拉否定: grep -v "brown ^\(dog\)" corpus.txt 。。。但那没用。任何想法都将不胜感激

我的数据格式如下:

a cat
a dog
brown cat
brown dog
brown cow
brown sheep
brown fish
a cat
a dog
brown dog
a cat
a dog
brown dog
我想过滤掉所有以棕色开头的行,除了棕色的狗。有没有一种简单的方法可以用grep或awk实现这一点?我试着这样使用克拉否定:

grep -v "brown ^\(dog\)" corpus.txt
。。。但那没用。任何想法都将不胜感激

最终,我希望输出如下:

a cat
a dog
brown cat
brown dog
brown cow
brown sheep
brown fish
a cat
a dog
brown dog
a cat
a dog
brown dog
是的,先生:

grep -vP '^brown (?!dog)' file
-p用于发动机使用。 选择是,先生:

grep -vP '^brown (?!dog)' file
-p用于发动机使用。 使用awk检查

正如学术练习一样,这里有一个没有实验性PCRE选项的grep命令:

使用awk:

正如学术练习一样,这里有一个没有实验性PCRE选项的grep命令:


现在还不清楚你是否特别想要只接受棕色的狗,但也许你只是想要这样的东西:

sed -e '/^brown/{/dog/!d;}'
这将删除所有以棕色开头的行,除非它们与字符串匹配。或者你想更严格些,做:

awk '!/^brown/ || $2 == "dog"'

现在还不清楚你是否特别想要只接受棕色的狗,但也许你只是想要这样的东西:

sed -e '/^brown/{/dog/!d;}'
这将删除所有以棕色开头的行,除非它们与字符串匹配。或者你想更严格些,做:

awk '!/^brown/ || $2 == "dog"'
好的,这里已经过了午夜了。我将发布此awk:

$ awk '!(/brown/ && !/dog/)' file
。。。早上再好好想想D晚安

不,无法入睡,必须解决它:

$ awk '!/^brown/ || /dog/' file
输出:

好的,这里已经过了午夜了。我将发布此awk:

$ awk '!(/brown/ && !/dog/)' file
。。。早上再好好想想D晚安

不,无法入睡,必须解决它:

$ awk '!/^brown/ || /dog/' file
输出:

另一个awk:

另一个awk:


添加线锚的起点/^布朗/,@karakfa谢谢。午夜后,我们会让一切都结束…添加线锚的开始/^布朗/,@karakfa谢谢。午夜过后,我们会让一切都结束…如果这条线以棕色开头呢?如果钓线是棕色的狗鱼呢?包括这样的案例,以显示如何在示例输入/输出中锚定字符串,以及包含regexp元字符(如果数据中存在)的案例,以显示您是否正在尝试进行字符串或regexp匹配。这是结构化数据,我在StackOverflow上创建了一个简单的testcase。数据中没有棕色或狗鱼。如果线条以棕色开头怎么办?如果钓线是棕色的狗鱼呢?包括这样的案例,以显示如何在示例输入/输出中锚定字符串,以及包含regexp元字符(如果数据中存在)的案例,以显示您是否正在尝试进行字符串或regexp匹配。这是结构化数据,我在StackOverflow上创建了一个简单的testcase。数据中没有褐色或狗鱼。谢谢!一般来说,我尽量不使用PCRE作为我的正则表达式引擎,但由于这只是一个一次性的过滤器,我会允许它。这个命令对我很管用。我认为这是一个直截了当的方法。”grep-v'+环顾四周消极展望未来。谢谢!一般来说,我尽量不使用PCRE作为我的正则表达式引擎,但由于这只是一个一次性的过滤器,我会允许它。这个命令对我很管用。我认为这是一个直截了当的方法。”grep-v'+环顾四周负面展望。