標準出力で改行+ 4xスペースを改行に置き換え

標準出力で改行+ 4xスペースを改行に置き換え

2行を1行にマージする必要がありますstdout。新しい行をスペース1つとスペース4つに置き換えます。空白のない新しい行に触れないでください。

tcpdump -vvv ... -l | xyz

出力は次のとおりです。

2014-06-06 AAA
    BBB
2014-06-06 CCC
    DDD

しかし、私は以下が必要です:

2014-06-06 AAA BBB
2014-06-06 CCC DDD

ベストアンサー1

より多くのエラー修正を提供するためにこれを編集しました。

sedの「N」コマンドは、次の行を追加します。改行と複数のスペースを変更するには、これを置き換えて使用します。

$ cat foo | sed 's/^/    /'
2014-06-06 AAA
    BBB
2014-06-06 CCC
    DDD
2014-06-06 EEE
2014-06-06 FFF
    GGG

私の新しい答え:

$ sed ':a;$!{N;s/\n   //;ba;}' foo
2014-06-06 AAA BBB
2014-06-06 CCC DDD
2014-06-06 EEE
2014-06-06 FFF GGG

これは以前の答えよりはるかに優れているようです。

$ sed '/^[^ ]/N;s/\n   //' foo
2014-06-06 AAA BBB
2014-06-06 CCC DDD
2014-06-06 EEE
2014-06-06 FFF
    GGG

または@mikeservがリストした美しいもの。

$ sed -n 'h;n;H;x;s/\n */ /p' foo
2014-06-06 AAA BBB
2014-06-06 CCC DDD
2014-06-06 EEE 2014-06-06 FFF
    GGG 

おすすめ記事