一致する文字列が両方の行にある場合にのみ、行を置き換える必要があります。
今後:
REF*CE*-------------------------
REF*1W*-------------------------
後ろに:
REF*1W*-------------------------
REF*CE*-------------------------
私はこれを試しましたが、うまくいきません。
ed -s testfile.txt <<<$'/REF*CE*/-0,/REF*CE*/+0m/REF*1W*/\nw\nq'
ベストアンサー1
sed -e :a -e '$!N;s/^\(REF\*CE.*\)\n\(REF\*1W.*\)/\2\n\1/;ta' -e 'P;D' <testfile.txt
- 最後の行にない場合は、次の行を追加します。
- 一致するものがある場合にのみ、現在の行で置き換えが行われます
substring containing pattern 1 + newline + substring containing pattern 2
。置換は2つの部分文字列を反転します。交換後の返品ラベル:a。 - 一致するものがない場合は、パターンスペースをそのまま印刷します。その後、パターン空間を削除し、ループを再開します。
周辺線の例...
In:
XEF*CE*-------------------------
REF*CE*-------------------------
REF*1W*-------------------------
REF*2W*-------------------------
Out:
XEF*CE*-------------------------
REF*1W*-------------------------
REF*CE*-------------------------
REF*2W*-------------------------
より一般的には、すべてのモード1とモード2に適用されます。
sed -e :a \
-e "\$!N; s/^\(.*${pattern1}.*\)\n\(.*${pattern2}.*\)/\2\n\1/;ta" \
-e 'P;D' < inputfile