sedを使用してパターンの後に2行をマージしたい(Windowsを使用しているため、awkはありません)ので、たとえば、ここに入力があります
pattern
XXXXXX
YYYYYY
出力は次のとおりです。
XXXXXXYYYYYY
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;}'
Windows で検証済み:
sed -r '1h; 1!H; ${ g; s/pattern[\r\n]+(.*)[\r\n]+(.*)/\1\2/ p}' infile
Multiline sed replaceに従って修正