2012-08-31 79 views
1

當談到編程時,我是一個初學者,我很感謝您願意提供的所有幫助。使用sed/awk/etc從包含任何其他文件中的字符串的文本文件中刪除行

這裏是我的問題......

我有很多在這行的,並且包含一些字符串(每行1串)一strings.txt一個的data.txt文件。

我想從data.txt中刪除所有行,如果它們包含string.txt中的任何字符串並將該新文件保存爲proc_data.txt。

我知道我可以使用sed來搜索並刪除一個或多個字符串,但有超過500個字符串需要在CLI中鍵入才能讓它......呃,你知道的。

什麼我試過到目前爲止

~$ for i in `cat strings.txt`; do sed '/${i}/d' data.txt -i.bak; done 

,但它只是讓data.txt中的相同大小的備份。

我在做什麼錯?

回答

2

使用grep

LC_ALL=C fgrep -v -f strings.txt data.txt >proc_data.txt 

它搜索的strings.txt所有字符串data.txt帶開關-f。反轉結果加上-v。將輸出重定向到您想要的文件。

+0

謝謝你的回答,並指出我在另一個方向:) –

+1

幫你一個忙[使用LC_ALL = C](http://www.inmotionhosting.com/support/website/ssh/speed-up -grep-searching-with-lc-all)(也可能是fgrep,如果你不使用正則表達式)。數量級更快。 – davemyron

+0

@orangechicken:有趣的鏈接。修正了我的答案。 – Birei

相關問題