文字列を含むテキストファイルでのみ行を置き換えるには、sedまたはedを使用しますか? [閉鎖]

文字列を含むテキストファイルでのみ行を置き換えるには、sedまたはedを使用しますか? [閉鎖]

一致する文字列が両方の行にある場合にのみ、行を置き換える必要があります。

今後:

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 
  1. 最後の行にない場合は、次の行を追加します。
  2. 一致するものがある場合にのみ、現在の行で置き換えが行われますsubstring containing pattern 1 + newline + substring containing pattern 2。置換は2つの部分文字列を反転します。交換後の返品ラベル:a。
  3. 一致するものがない場合は、パターンスペースをそのまま印刷します。その後、パターン空間を削除し、ループを再開します。

周辺線の例...

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

おすすめ記事