LoginSignup
2
3

More than 5 years have passed since last update.

sed で特定行の改行を削除する

Last updated at Posted at 2017-10-09

sed は比較的簡単にテキストデータの加工ができて大変重宝するツールですが、複数行マッチさせて何か処理するという際にちょっと困ってしまったのでメモ。

GNU sed (Linux)

sh
sed -r "/.+:/N;s/(.+:.*)\n(.*)/\1\2/g" sample.txt

BSD sed (Mac, UNIX)

sh
sed -E "/.+:/N;s/(.+:.*)\n(.*)/\1\2/g" sample.txt

これで、最初のパターン「.+:」にマッチする対象行を次の行と連結できます。
正しい動作を理解しているわけではないのですが、「N」を指定して直前の条件式にマッチする対象行の次の行をパターンスペースに追加して、対象行と次の行の2行に対して置換しているイメージです。
ただし、あくまでも次の行のみなので、間に空行を含む場合等ではさらに工夫が必要です。

例えば次のようなデータの場合、

sample.txt
AAA:
 200

BBB:
 100

下記のようになります。

AAA: 200

BBB: 100
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3