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

时间:2020-07-01 21:25:24

标签: regex awk grep

我的数据格式如下:

a cat
a dog
brown cat
brown dog
brown cow
brown sheep
brown fish

brown dog外,我想过滤掉所有以“棕色”开头的行。有没有简单的方法可以使用grep或awk做到这一点?我试图像这样使用克拉负值:

grep -v "brown ^\(dog\)" corpus.txt

...但是那没用。任何想法将不胜感激。

最终我希望输出如下:

a cat
a dog
brown dog

6 个答案:

答案 0 :(得分:3)

使用awk

awk '/^brown dog/ || !/^brown/' file
a cat
a dog
brown dog

这只是一项学术练习,是grep命令,没有实验 PCRE选项:

grep -vE '^brown($|[^ ]| ([^d]|$)| d([^o]|$)| do([^g]|$))' file

答案 1 :(得分:2)

是的,先生:

 mergeTasks.Add(Task.Run(() => {
        if (i >= allArrays.Count) Console.WriteLine($"i is too high! i = {i}");
        return Merge(allArrays[tmp], allArrays[tmp  + 1]);
    }));
grep -vP '^brown (?!dog)' file

a cat a dog brown dog 引擎使用。
选中explanations

答案 2 :(得分:2)

awk '/^brown/ && !/dog$/{next} 1' file

答案 3 :(得分:1)

好,这已经是午夜了。我要发布这个awk:

$ awk '!(/brown/ && !/dog/)' file

...,并认为是早上。 :D晚安。

没有,无法入睡,不得不解决它:

$ awk '!/^brown/ || /dog/' file

输出:

a cat
a dog
brown dog

答案 4 :(得分:0)

不清楚您是否只想只接受“棕色狗”,但也许您只想要类似的东西:

sed -e '/^brown/{/dog/!d;}'

这将删除所有以“棕色”开头的行,除非它们与字符串“ dog”匹配。或者,也许您想变得更严格,然后做:

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

答案 5 :(得分:0)

另一个awk

$ awk '!(/^brown/ && $2!="dog")' file
a cat
a dog
brown dog
相关问题