我需要在文件中找到和删除70多个字符串。我需要删除字符串出现的文件中的整行。
我知道我可以使用sed -i '/string to remove/d' fileA.txt
一次删除一个。但是,考虑到我有70岁以上,这需要一些时间。
有没有办法可以将这70多个字符串放在一个文件中并逐个浏览它们?或者,如果我创建一个包含字符串的文件,有没有办法比较这两个文件,以便从fileA中删除包含其中一个字符串的任何行?
答案 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