sed-删除不包含模式的行

Bol*_*boa 7 bash sed

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

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

例如,我有这个文件:

cat kitty dog
giraffe panda
lion tiger
Run Code Online (Sandbox Code Playgroud)

我想要一个sed命令,当被调用时,将删除所有不包含该单词的行cat:

cat kitty dog
Run Code Online (Sandbox Code Playgroud)

Ami*_*mit 8

这样做:

sed -i '/cat/!d' file1.txt
Run Code Online (Sandbox Code Playgroud)

强制完全匹配:

sed -i '/\<cat\>/!d' file1.txt
Run Code Online (Sandbox Code Playgroud)

要么

sed -i '/\bcat\b/!d' file1.txt
Run Code Online (Sandbox Code Playgroud)

其中,\<\>\b\b强制执行精确匹配.


Ken*_*ent 5

因此,您的要求是“给我所有包含字符串的行cat”。那为什么不简单地使用grep

grep cat file
Run Code Online (Sandbox Code Playgroud)