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-元より長い行が含まれています。削除以下を含む行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-

関連情報