Bash 删除包含多个字符串之一的行

Bash 删除包含多个字符串之一的行,bash,text,sed,Bash,Text,Sed,我有一个文本文件,我想删除所有包含以下内容的行:facebook、youtube、google、amazon、dropbox,等等 我知道删除包含sed字符串的行: sed '/facebook/d' myfile.txt 我不想对每个字符串运行此命令五次,但有没有办法将所有字符串组合成一个命令?试试以下方法: sed '/facebook\|youtube\|google\|amazon\|dropbox/d' myfile.txt 发件人: regexp1\| regexp2 匹配reg

我有一个文本文件,我想删除所有包含以下内容的行:
facebook
youtube
google
amazon
dropbox
,等等

我知道删除包含sed字符串的行:

sed '/facebook/d' myfile.txt
我不想对每个字符串运行此命令五次,但有没有办法将所有字符串组合成一个命令?

试试以下方法:

sed '/facebook\|youtube\|google\|amazon\|dropbox/d' myfile.txt
发件人:

regexp1\| regexp2

匹配
regexp1
regexp2
。使用括号来使用 复杂的替代正则表达式。匹配过程将尝试 每个选项依次从左到右,第一个选项 使用成功。它是GNU扩展

“wordsToExcludeFile”应该包含您不想要的单词,每行一个

如果需要将结果保存回同一文件,请将其添加到命令中:

 > myfile.new && mv myfile.new myfile.txt
使用
awk

awk '!/facebook|youtube|google|amazon|dropbox/' myfile.txt > filtered.txt

点是正则表达式的“通配符”字符:点匹配任何一个字符。正则表达式“facebook.com”将匹配字符串“facebook.com”,但它也将匹配字符串“facebook.com”。这是一个冗长的说法,是的,它会起作用。你看到意想不到的结果了吗?呃,谷歌上有这么多这样的问题,所有的答案都假设是一个简短的列表。他的列表以etc结尾,如果黑名单长达100000个单词,下面的答案是否合理?而通过gawk,我只能精确匹配整个单词。“gawk'!/\\\\\\\\\\\\\/'myfile.txt>filtered.txt”
awk '!/facebook|youtube|google|amazon|dropbox/' myfile.txt > filtered.txt