ファイルのパターンを2番目のファイルのパターンに置き換えます。

ファイルのパターンを2番目のファイルのパターンに置き換えます。

ファイルデータの一部を他のファイルのデータに置き換えたいです。

file1以下のデータがあり、file2開始パターンと終了パターンを保存して交換したいfile1データがあるとします。file2// +++ CUSTOMIZATION SETTINGS START +++// +++ CUSTOMIZATION SETTINGS END +++

存在するfile1

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WE WILL BE ON LEAVE FOR TODAY 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

存在するfile2

MANISH
MADHVI

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

NISHA
TUSHAR

出力としてfile3

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

ベストアンサー1

$ awk '/SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}} FNR==NR{next}   /SETTINGS START/{print substr(a,2)} /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next}  1' file2 file1
ANJALI NISHA

// +++ CUSTOMIZATION SETTINGS START +++

WELCOME ALL

// +++ CUSTOMIZATION SETTINGS END +++

PREETI MONA

説明する

awkファイルを1行ずつ暗黙的に繰り返します。この例では、まずfile2を繰り返し、次にfile1を繰り返します。

  • /SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}}

    file2の設定は部分的に変数にキャプチャされますa

  • FNR==NR{next}

    それでもfile2を読み取っている場合は、コマンドの残りの部分をスキップして次の入力行に進みます。

  • /SETTINGS START/{print substr(a,2)}

    ここに到着したらfile1を処理しています。設定セクションの先頭が表示されたら、変数に保存した文字列を印刷しますa

  • /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next}

    file1の設定セクションにある場合は、残りのコマンドをスキップして次の入力行に移動します。

  • 1

    1現在行を印刷するためのawkの神秘的な速記です。このステートメントは、設定セクションではなくfile1にある場合にのみ表示されます。

おすすめ記事