Awk
Sed 合併兩個不同模式之間的分割線
我想合併 ^pattern2 和它的 “;.
改變這個:
pattern2 "xxx xxxxxx xxxxxxxx"; pattern2 "xxxx xxxxxxx xxxxxxxxx xxxxxxxxx"; pattern2 "xxxx xxxxxxx xxxxxxxxx xxxxxxxxx yyyy yyyyyy yy yyyyyyyyyy yyyyyyy"; pattern3 "xxx xxxxxx xxxxxxxx xxx xxxxxx xxxxxxxx"; pattern2 "xxx xxxxxx xxxxxxxx";
至
pattern2 "xxx xxxxxx xxxxxxxx"; pattern2 "xxxx xxxxxxx xxxxxxxxx xxxxxxxxx"; pattern2 "xxxx xxxxxxx xxxxxxxxx xxxxxxxxx yyyy yyyyyy yy yyyyyyyyyy yyyyyyy"; pattern3 "xxx xxxxxx xxxxxxxx xxx xxxxxx xxxxxxxx"; pattern2 "xxx xxxxxx xxxxxxxx";
我以前用過這個 sed 命令
sed -i -e '/^pattern2/!b' -e :a -e 'N;/\;/!ba' -e 's/\n/ /g' input_file
但在這種情況下,它會給出以下輸出:
pattern2 "xxx xxxxxx xxxxxxxx"; pattern2 "xxxx xxxxxxx xxxxxxxxx xxxxxxxxx"; pattern2 "xxxx xxxxxxx xxxxxxxxx xxxxxxxxx yyyy yyyyyy yy yyyyyyyyyy yyyyyyy"; pattern3 "xxx xxxxxx xxxxxxxx xxx xxxxxx xxxxxxxx"; pattern2 "xxx xxxxxx xxxxxxxx";
謝謝
怎麼樣
$ sed '/^pattern2/{ :1 /;$/b N s/\n/ / t1 }' file pattern2 "xxx xxxxxx xxxxxxxx"; pattern2 "xxxx xxxxxxx xxxxxxxxx xxxxxxxxx"; pattern2 "xxxx xxxxxxx xxxxxxxxx xxxxxxxxx yyyy yyyyyy yy yyyyyyyyyy yyyyyyy"; pattern3 "xxx xxxxxx xxxxxxxx xxx xxxxxx xxxxxxxx"; pattern2 "xxx xxxxxx xxxxxxxx";
作為單行
sed '/^pattern2/{:1;/;$/b;N;s/\n/ /;t1;}' file
使用
GNU sed
其擴展正則表達式模式 (-E
):sed -E ' /^pattern2(.*[^;])?$/{ N;H;z;x;D } y/\n/ / ' file