sed: 2行を一致させる

sed: 2行を一致させる

テキスト ファイルがあり、レコードが 2 行に分割されています。これを 1 行にまとめたいのですが、レコードは次のようになります。

2013-07-29
 apt-get install git
2013-07-29
 apt-get install rsync
2013-07-31
 apt-get install nmap
2013-08-02
 apt-get install cifs-utils
2013-08-05
 apt-get install telnet

以下のものを入手したいです:

2013-07-29 apt-get install git
2013-07-29 apt-get install rsync
2013-07-31 apt-get install nmap
2013-08-02 apt-get install cifs-utils
2013-08-05 apt-get install telnet

で試してみましたsedが、2 行を一致させることができません。 に何かトリックがあるのでしょうかsed、それとももっと良いツールがあるのでしょうか?

答え1

sed 'N;s/\n/ /'
  • N次の入力行をパターンスペースに結合する
  • s/\n/ /行を区切る改行をスペースに置き換えます。

または:

sed -n 'N;s/\n/ /;/regex/p'
  • -n最後のコマンドとしてパターンスペースの自動印刷を無効にする
  • /regex/p正規表現に一致する行を出力します

g2 行以上を結合する場合は、置換の修飾子を使用しますN;N;N;s/\n/ /g。例:

答え2

apt-get行の先頭に空白があるようです。つまり:

sed -e :a -e '$!N;s/\n / /;ta' -e 'P;D' inputfile

望ましい結果が得られるはずです。

代わりに、以下も使用できますpaste:

paste -d' ' - - < inputfile

関連情報