2017-06-05 160 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