テキスト ファイルがあり、レコードが 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
正規表現に一致する行を出力します
g
2 行以上を結合する場合は、置換の修飾子を使用します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