GNU sedを使用して特定の行と次の空行を削除する方法は?

GNU sedを使用して特定の行と次の空行を削除する方法は?

次のテキストがあります。

Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish

Start-Date: 2013-11-11  11:27:07

Start-Date: 2013-10-16  22:53:02

Start-Date: 2013-10-16  22:55:16

Start-Date: 2013-10-17  22:41:09

Start-Date: 2013-10-17  22:42:02

Start-Date: 2013-10-17  22:42:33

Start-Date: 2013-10-17  22:46:01

Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes

Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

「開始日」で始まる行と次の空行を削除したいと思います。つまり、私はただ次のことをしたいと思います:

Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish

Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes

Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

私の質問が重複していないことを願っています。特定の文字列を含む行と次の行を削除します。

答え1

sed '/^Start-Date:/ {N; /\n$/d}'

sedは、ライングループを吸収/認識し、目的の操作を実行するストリームエディタです。

N「現在のバッファに改行と次の入力ラインを追加します」なので、バッファ\nにあるのは追加されたラインの先頭です。/\n$/dこれは、「バッファに最後に追加された行が空の場合はすべて削除」を意味します。

答え2

awk役に立つ:

$ awk '{if ($1=="Commandline:") {printf "%s\n%s\n\n", l,$0}; l=$0}' test.txt 
Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish

Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes

Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

答え3

パールでは:

$ perl -ne 'print $last,"$_\n" if /^Commandline/; $last=$_' foo.txt 
Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish

Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes

Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

または空白行を削除します。

$ perl -ne 'print $last,$_ if /^Commandline/; $last=$_' foo 
Start-Date: 2013-11-11  07:43:49
Commandline: apt-get install --no-install-recommends catfish
Start-Date: 2013-10-17  23:00:06
Commandline: apt-get install shimmer-themes
Start-Date: 2013-10-17  23:01:52
Commandline: apt-get install --no-install-recommends gedit

この-nスイッチを使用すると、perl入力ファイルが1行ずつ処理され、各行が特殊変数に保存されます$_。上記のスクリプトは、現在の行($_)と現在の行がで始まる場合は前の行()を印刷します。次に、現在の行を別の名前で保存し、次の行に移動します。$lastCommandline$last

関連情報