在 Debian Linux 中使用 sed 命令删除文件中的行

在 Debian Linux 中使用 sed 命令删除文件中的行

我想问你是否知道如何在 Linux 上使用 sed 命令删除单个文件中的行。

例如我有文件:

       something
       something-
       somethingelse

我想创建 sed 命令来删除包含“某物”的所有行,但我也不想删除某物所在的行。 “-”这样的特定字符在哪里。谢谢你的建议。

我尝试制作类似 sed -i "/something/d" 的东西。

答案1

sed -e '/something[^-]/d' -e '/something$/d' -i "$file"

甚至更短,由 Philippos 提出:

sed -i '/something\([^-].*\)*$/d' "$file"

答案2

假设更重要的是保持包含something-比它是 to 的行删除包含以下内容的行something

sed '/something/ { /something-/!d; }' file

这会找到包含该字符串的所有行something,并删除所有这些行,除非它们也包含something-

测试:

$ cat file
something something blah blah
something something- blah blah
somethingelse
something
something-
$ sed '/something/ { /something-/!d; }' file
something something- blah blah
something-

相关内容