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

问题描述 投票:0回答:4

我有一个文本文件,我想删除包含以下单词的所有行:

facebook
youtube
google
amazon
dropbox

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

sed '/facebook/d' myfile.txt

我不想为每个字符串运行这个命令五次不同的时间,有没有一种方法可以将所有字符串组合成一个命令?

bash text sed
4个回答
16
投票

试试这个:

sed '/facebook\|youtube\|google\|amazon\|dropbox/d' myfile.txt

来自 GNU 的 sed 手册

regexp1\|regexp2

匹配

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


8
投票
grep -vf wordsToExcludeFile myfile.txt

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

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

 > myfile.new && mv myfile.new myfile.txt

6
投票

awk

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

0
投票

使用

grep

删除多个字符串
grep -vE "facebook|youtube|google|amazon|dropbox" file.txt > filtered.txt

使用

grep

删除不区分大小写的字符串
grep -viE "facebook|youtube|google|amazon|dropbox" file.txt > filtered_case_insensitive.txt
© www.soinside.com 2019 - 2024. All rights reserved.