我想问你是否知道如何在 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-