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-