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'+环顾四周负面展望。