2013-03-18 21 views

回答

3

如何

$ grep -v -f words_to_exclude.txt input.txt 

其中

-f指定要grep來匹配

-v字的文件指定要grep來輸出什麼比賽

以上要求兩個文件每行需要一個單詞。

+2

更好考慮grep與'-F'和'-w' – Kent 2013-03-18 16:58:06

+0

這將刪除整個行包含匹配的單詞,而不僅僅是單詞本身。 – chepner 2013-03-18 17:25:15

1

人的grep這樣說:

-f FILE,--file = FILE 從文件中獲取模式,每行一個。空文件包含零模式,因此不匹配任何內容。 (-f由POSIX指定。)

和此:

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

所以,是的,使用grep會是一個好方法。至少如果你想從輸入文件中刪除所有包含特殊詞的行。如果你只想刪除單詞,事情會變得更加複雜。

0

sed可能是你要找的東西。示例腳本:

#! /usr/bin/bash 
for word in $(cat $1); 
do 
sed s/$word//g $2 > tmp; 
mv tmp $2; 
done; 

假設你保存到script.sh這一點,你會說它是這樣的:

./script.sh wordsToExclude.txt textToProcess.txt 

$1是 「論點1號」 在bash在此情況下wordsToExclude.txt,同樣,$2textToProcess.txt

這是幹什麼的,它將$ word的每個實例都替換爲空,tmpfile只是作爲sed寫入的緩衝區,以便它不會破壞源,而wo rking。

sed命令中的g是「全局替換標誌」。 sed的默認行爲是僅替換一行中第一次出現的搜索模式。 g標誌告訴sed替換所有的事件,而不僅僅是第一個。

+1

BSD sed接受'-i' - inplace。 – khachik 2013-03-18 17:06:26

+0

這隻解決了一半的問題;有一整個文件充滿了要從另一個文件中刪除的單詞,而不僅僅是存儲在變量中的單個單詞。 – chepner 2013-03-18 17:26:28

+0

@chepner整頓。我認爲他一開始就在尋找答案的「部分」,而不是其他部分。這仍然是事實,但我仍然編輯答案。 – 2013-03-18 18:17:51

相關問題