簡體   English   中英

grep/awk:有條件地排除單詞

[英]grep/awk: exclude words conditionally

我的數據格式如下:

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

我想過濾掉所有以“brown”開頭的行,除了brown dog 有沒有一種簡單的方法可以使用 grep 或 awk 做到這一點? 我嘗試像這樣使用克拉否定:

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

......但這沒有用。 任何想法將不勝感激。

最終我希望 output 是這樣的:

a cat
a dog
brown dog

使用awk

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

就像這里的學術練習一樣,是沒有實驗性PCRE選項的grep命令:

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

是的先生:

grep -vP '^brown (?!dog)' file
a cat
a dog
brown dog

-P用於引擎。
檢查說明

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

好的,這里已經過了午夜。 我要發布這個 awk:

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

...並在早上想通了。 :D 晚安。

不,睡不着,必須解決它:

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

Output:

a cat
a dog
brown dog

目前尚不清楚您是否只想接受“棕色狗”,但也許您只想要類似的東西:

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

這將刪除所有以“brown”開頭的行,除非它們與字符串“dog”匹配。 或者,也許您想更嚴格並執行以下操作:

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

另一個awk

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM