web-dev-qa-db-ja.com

一致した後、行末まで削除し、行を一致させないでください

次の形式のファイルがあります。

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はこの種の治療に適していますか?

9
Youri_Margarine

-nオプションを省略する必要があります。チェックアウト http://www.gnu.org/software/sed/manual/sed.html#index-g_t_002d_002dquiet-7

2
ctn

sed-nオプションは、pステートメントの後にsedオプションを置くと、後で有効になるデフォルトの印刷を抑制します。

上記の例では、sedに指示しているのは、すべての行の印刷を抑制してから、置換が正常に行われた行のみを印刷することです。その結果、置換が行われない行は印刷されません。

コマンドから-nオプションとpを削除する必要があります。

sed -ie 's/-MIB.*$/-MIB/' ./myfile
1
jaypal singh