sed:2行に一致


11

レコードが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、それともより良いツールがありますか?


2つの行を一致させたいというよりは、一致を見つけた後にその行に参加したいようです。はい?
kurtm 2013年

回答:


13
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


覚えておくべきポイント:sedはライン上で動作します!sed 's/>\n</>,</'sedが一度に複数のラインで機能することに気づくまで、私は何年にもわたって仕事 に就こうとしました。1つのクイックduckduckgo検索と@peterphにより、残りの髪を保つことができました

6

と思われるapt-get行は、先行する空白を持っています。言う:

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

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

または、次を使用することもできますpaste

paste -d' ' - - < inputfile
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.