9

sedを使用してパターンの後に2行をマージしたい(Windowsを使用しているため、awkはありません)ので、たとえば、ここに入力があります

pattern
XXXXXX
YYYYYY

出力は次のとおりです。

 XXXXXXYYYYYY
4

2 に答える 2

20

sed を使用すると、次のように動作します。

sed -n '/pattern/ {s/.*//; N; N; s/\n//g; p;}'

説明

  • /pattern/pattern にマッチし、波括弧ブロックを実行します{ }
  • s/.*//はパターン スペースからパターンを削除します。パターンを削除するためのより短いがよりあいまいな方法は、コマンドでパターンスペースとホールド スペースを交換することです。x
  • N入力ファイルから次の行を取得し、パターン スペースに追加します。
  • s/[\r\n]//gパターンスペースからすべての改行と改行を削除します。
  • pパターンスペースを印刷します。

3行を結合するための少し短い解決策は次のとおりです。

sed -n '/pattern/ {x; N; N; s/\n//g; p;}'
于 2012-08-31T09:29:24.360 に答える
1

Windows で検証済み:

sed -r '1h; 1!H; ${ g; s/pattern[\r\n]+(.*)[\r\n]+(.*)/\1\2/ p}' infile

Multiline sed replaceに従って修正

于 2012-08-31T09:36:28.967 に答える