あるファイル内のテキストを見つけ、別のファイルSEDまたはAWKのテキストに置き換えます。

あるファイル内のテキストを見つけ、別のファイルSEDまたはAWKのテキストに置き換えます。

Ubuntu 18ビルド

in[define( 'AUTH_KEY',]なしでこのテキストを見つけて、その行をコピーしてから同じ行を置き換えようとします。私はいくつかのオプションを試しましたが、成功しませんでした。[]/var/www/file1.txt/var/www/file2.phpsedawk

awk '/"define\( 'AUTH_KEY',"/' /var/www/file1.txt > /var/www/file2.php
sed -i 's/"define\( 'AUTH_KEY',"/' /var/www/file1.txt >> /var/www/file2.php

file1.txt行が含まれています

define('AUTH_KEY',         '{++X!upib~T.#C.&ykXDQpQ<nyrD7jadfu*adk^);

file2.php行が含まれています

define( 'AUTH_KEY',         'put your unique phrase here' );

file1.txtから同じ行を置き換えるには、from行が必要ですfile2.php

ベストアンサー1

awk '
  /define\([ \t]*\047AUTH_KEY\047,/{ 
    if (FNR==NR){ line=$0 }
    else{ $0=line }
  }
  FNR!=NR
' /var/www/file1.txt /var/www/file2.php > /var/www/file2.php.new
mv /var/www/file2.php.new /var/www/file2.php

角かっこ式は、[ \t]スペースまたはタブ文字とパターンと*ゼロ回以上一致します。 \0478進数の単一引用符です'

最初のファイルが処理されると、一致するレコードが変数に保存されますline。 2番目のファイルが処理されると、一致するレコードがline

FNR!=NR2番目のファイルの履歴を印刷します。

おすすめ記事