[英]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
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.