2017-06-05 208 views
-2

我有1.txt的:刪除字符串匹配

hi aa my name is bb tom 
how are you cc today 

和我有2.txt(即我不想字)

aa 
bb 
cc 

和我的預期成果是

hi my name is tom 
how are you today 

我到目前爲止試過的是

sed -e "s/$(sed 's:/:\\/:g' 2.txt)/ /" 
or 
grep -Fvf 2.txt 1.txt 

我有超過100個字,我不想要的,所以我必須把它放在一個句子,謝謝

+0

如果'1.txt'包括單詞「土豚」,你希望看到「rdvark」輸出?或者你只想考慮全文匹配? – jas

+0

是的,我很想保持土豚,所以我想我要編輯我的2.txt到像「aa」這樣的標準格式。任何關於刪除它們的想法?謝謝! –

+0

像aa這樣的格式的問題是,它不會匹配以「aa」開頭或以「aa」結尾的行。 – jas

回答

1

不歸位......

$ sed -f <(sed 's/.*/s_\\b&\\b__g/' remove_list) file 

hi my name is tom 
how are you today 
aardwark 

處理空間和單詞邊界,一個替代

$ sed -f <(sed 's/.*/s_ &\\b__g;s_\\b& __g;s_\\b&\\b__g/' remove) file 

然而,在這一點上,最好切換到awk

+0

嗨,我已經嘗試了兩種,但輸出與1.txt相同。我正在使用mac,這是一個問題嗎? –

+0

對不起,不知道哪個版本的sed'安裝在那裏... – karakfa

+0

是的,我使用sed很多,但很多時候不同的系統使用不同的標誌,我仍然在學習。你能告訴我你使用的是什麼樣的系統嗎? –

0

GAWK解決方案:

awk 'NR==FNR{ a[$0]; next }{ for(i in a) gsub("\\<"i"\\> *","",$0) }1' 2.txt 1.txt 

輸出:

hi my name is tom 
how are you today 

  • a[$0] - 積累應該從每個句子

  • gsub("\\<"i"\\> *","",$0)被刪除的話 - 替換每個「不需要」字(作爲一個整體詞)與空字符串

+0

將留下空格。可能並不重要。 – karakfa

+0

我可以知道你使用的是什麼樣的系統嗎?我正在使用mac。它會變得不同嗎? –

+0

@RobertChoy,運行'brew install gawk',然後應用我的方法 – RomanPerekhrest