次の形式のファイルがあります。
interesting text-MIB blah blah blah
VERY INTERESTING TEXT
interesting text-MIB blah blah blah
「-MIB」文字列を含む各行で、この文字列に続くテキストを行の終わりまで削除したいと思います。
次のコマンドは意図したとおりに機能しているようです。
sed -i -n -e 's/-MIB.*$/-MIB/p' ./myfile
私の問題は、パターンが見つからない行も削除されることです。ここでは、「VERYINTERESTINGTEXT」という行が削除されます。私はsedにあまり詳しくありません。私は何が間違っているのですか? sedはこの種の治療に適していますか?
-n
オプションを省略する必要があります。チェックアウト http://www.gnu.org/software/sed/manual/sed.html#index-g_t_002d_002dquiet-7
sed
-n
オプションは、p
ステートメントの後にsed
オプションを置くと、後で有効になるデフォルトの印刷を抑制します。
上記の例では、sed
に指示しているのは、すべての行の印刷を抑制してから、置換が正常に行われた行のみを印刷することです。その結果、置換が行われない行は印刷されません。
コマンドから-n
オプションとp
を削除する必要があります。
sed -ie 's/-MIB.*$/-MIB/' ./myfile