改行文字を含む文字列を置き換える

改行文字を含む文字列を置き換える

シェルを使用してbash次の行を含むファイルから

first "line"
<second>line and so on

1つ以上の項目を毎回次に"line"\n<second>変更したいと思います。other characters

first other characters line and so on

"したがって、文字列を同じ特殊文字に置き換え、<改行文字に置き換える必要があります。

他の答えから検索した後、sedコマンドの右側(したがって文字列other characters)では改行を許可できますが、左側では許可されていません。

どのような方法がありますか(よりこれsedこの結果を得るにはgrep

ベストアンサー1

まあ、私はいくつかの簡単な方法を考えることができますがgrep(とにかく交換を行いません)またはsed

  1. パール

    変える"line"\n<second>が表示されたら、other characters以下を使用してください。

    $ perl -00pe 's/"line"\n<second>/other characters /g' file
    first other characters line and so on
    

    または、複数の連続した発生を1つとして扱い、"line"\n<second>すべて単一の項目に置き換えるには、次のようにother charactersします。

    perl -00pe 's/(?:"line"\n<second>)+/other characters /g' file
    

    例:

    $ cat file
    first "line"
    <second>"line"
    <second>"line"
    <second>line and so on
    $ perl -00pe 's/(?:"line"\n<second>)+/other characters /g' file
    first other characters line and so on
    

    これ-00により、Perlは「ショートモード」でファイルを読み込みます。つまり、「行」\n\nがと定義され、\n本質的に各段落が 1 行に処理されるという意味です。したがって、交換は改行全体で一致します。

  2. アッ

    $  awk -v RS="\n\n" -v ORS="" '{
          sub(/"line"\n<second>/,"other characters ", $0)
          print;
        }' file 
    first other characters line and so on
    

    基本的なアイデアは同じです。レコード区切り記号(RS)を設定して\n\nファイル全体を削除し、出力レコード区切り文字を空白に設定し(それ以外の場合は追加の改行が印刷されます)、この関数を使用してsub()それを置き換えます。

おすすめ記事