从文件中删除70多个字符串的最快方法?

时间:2014-05-30 01:48:05

标签: linux sed

我需要在文件中找到和删除70多个字符串。我需要删除字符串出现的文件中的整行。

我知道我可以使用sed -i '/string to remove/d' fileA.txt一次删除一个。但是,考虑到我有70岁以上,这需要一些时间。

有没有办法可以将这70多个字符串放在一个文件中并逐个浏览它们?或者,如果我创建一个包含字符串的文件,有没有办法比较这两个文件,以便从fileA中删除包含其中一个字符串的任何行?

2 个答案:

答案 0 :(得分:5)

您可以使用grep

grep -vf file_with_words.txt file.txt

其中file_with_words.txt是包含单词列表的文件,每个单词位于不同的行,file.txt是要从中删除行的文件。

如果您的单词列表包含正则表达式元字符,请告诉grep将其视为固定字符串(如果这是您想要的):

grep -F -vf file_with_words.txt file.txt

使用sed,您需要说:

sed '/word1\|word2\|word3/d' file.txt

sed -E '/word1|word2|word3/d' file.txt

您也可以使用命令替换来构建模式:

sed -E "/$(paste -sd'|' file_with_words.txt)/d" file.txt

grep显然是在这种情况下使用的工具。

答案 1 :(得分:0)

如果你想在bash中完成这项工作,请按以下方式进行:

search=fileA.txt

queries=queries.txt

while read query
do
    sed  -i '' "/$query/d" $search
done < "$queries"

其中queries.txt看起来像

I
want
to
delete
these
lines