2013-03-14 97 views
0

我試圖刪除包含列表中任何單詞的文本中的行。例如:在命令行中刪除包含多個單詞的整行

文件1:

xxx yyy, zzz, 
aaa bbb, sss, 
ccc fff, zzz, 
rrr www, qasd, 

文件2:

xxx 
zzz 
rrr 

目標是刪除file1中含有file2中的任何單詞的行。 所以輸出應該是:

aaa bbb, sss, 

我知道如何使用SED與單個詞,像sed「/ ZZZ/d」刪除包含ZZZ線。但它是如何在多個單詞或文件中的單詞中起作用?

回答

1

試試這個:

grep -vFwf file2 file1 
+0

這一個作品,謝謝! – 2013-03-14 11:21:29

+0

:) bukeqi ~~~~~~ – Kent 2013-03-14 11:22:37

2

你可以用grep很容易地做到這一點:

$ grep -Fwvf file2 file1 
aaa bbb, sss, 

選項:

-f FILE,--file = FILE

從文件中獲取模式,每行一個。空文件包含零模式,因此 什麼都不匹配。 (-f由POSIX指定。)

-v,--invert匹配

反轉匹配的意義上,以選擇不匹配的行。 (-v是由POSIX指定。)

-w,--word-regexp的

選擇只含有形成完整的詞的匹配的那些行。測試是 匹配的子字符串必須位於行的開頭,或者以非字 組成字符開頭。同樣,它必須位於行末,或者後面跟着一個非單詞組成字符 。字成分字符是字母,數字和 下劃線。

-F,--fixed串

解釋圖案作爲固定的字符串的列表,並以換行,其中任何一個將被 匹配分離。 (-F由POSIX指定)。

要保存更改回file1

$ grep -Fwvf file2 file1 > tmp && mv tmp file1 
+0

它..一點點... ...什麼風險關於file2中有一行如'rr'或甚至'r'*' – Kent 2013-03-14 11:10:01

+0

然後它不匹配@Kent你的答案是相同的,但沒有選項說明或將更改存迴文件? – 2013-03-14 11:13:38

+0

它會匹配,並且在修復你的之前我的不一樣。現在他們是一樣的。 – Kent 2013-03-14 11:17:41

相關問題