sed 搜索多个单词并删除这些行

sed 搜索多个单词并删除这些行

我有一个超过 50000 行的主文件,我需要从实际文件中删除大约 20000 行,为此我使用的grep -vE命令显示错误,因为参数太多。

我正在使用sed命令删除那些使用 for 循环的内容。但删除需要很长时间,因为sed要初始化 20000 个命令。

for i in `cat 20000-words.txt`; do 
    sed -i -e "/$i/ d" 50000-lines.txt
done

答案1

假设 20000-words.txt 已经是每行一个单词的格式,请执行以下操作:

grep -vFf 20000-words.txt 50000-lines.txt >50000-filtered-lines.txt

grep 的参数-f告诉它从文件中读取模式,每行一个模式,而不是将它们作为命令行参数。 grep 的参数-F告诉它模式应该用作文字字符串而不是正则表达式。

答案2

要做到这一点grep并且假设您没有重复的行,您可以:

$ sort 20000-words.txt 50000-lines.txt | uniq -u

或者:

$ comm -23 <(sort 50000-lines.txt) <(sort 20000-words.txt)

相关内容