sed- 删除不包含模式的行

sed- delete line that doesn't contain a pattern

我很惊讶在 SO 上找不到与此类似的问题。

如何使用 sed 删除所有不包含特定模式的行。

例如,我有这个文件:

cat kitty dog
giraffe panda
lion tiger

我想要一个 sed 命令,它在调用时将删除所有不包含单词 cat:

的行
cat kitty dog

这样做:

sed -i '/cat/!d' file1.txt

强制完全匹配:

sed -i '/\<cat\>/!d' file1.txt

sed -i '/\bcat\b/!d' file1.txt

其中 \<\> & \b\b 强制完全匹配。

所以您的要求是 "give me all lines containing string cat"。那为什么不简单地使用 grep :

grep cat file

你可以使用这个awk

awk '/cat/' file

查看所有包含单词 'cat' 的行(如 Kent 所指):

grep cat file

查看所有不包含单词 'cat':

的行
grep -v cat file