ファイル内で一致するすべての文字列を再帰的に置き換えるには?

ファイル内で一致するすべての文字列を再帰的に置き換えるには?

フォルダ名siteの下に約50個のHTML / jsファイルがあります。

一部のファイルには以下が含まれます(次の行はファイル内で組み合わされます)

    {"rendered":"http:\/\/localhost:4542\/?page_id=854"}
                 http:\/\/localhost:4542\/wp-content\/uploads\/2022\/09\/
           src=\"http:\/\/localhost:4542\/wp-content\/uploads\/2022\/09\/B
                 http:\/\/localhost:4542\/wp-content\/uploads\/2022\/09\/A
replies":[{"embeddable":true,"href":"http:\/\/localhost:4542\/en\/wp-json  

フォルダ内のすべてのファイルを繰り返し変更できるツール/コマンドはありますかhttp:\/\/localhost:4542https:example.com

これでmacOSで作業しています。

ベストアンサー1

持ち運べる:

LC_ALL=C find . '(' -name '*.[Jj][Ss]' -o \
                    -name '*.[Hh][Tt][Mm][Ll]' -o \
                    -name '*.[Hh][Tt][Mm]' \
                ')' -exec perl -pi -e '
  s{\Qhttp:\/\/localhost:4542\E}{https:example.com}g' {} +

置き換えるファイルがまったくないファイルを再作成することに注意してください。

GNU grep/xargsまたは互換性(ここでは過度の入力を避けるために中括弧拡張をサポートするシェル)の場合は、これを回避できます。

LC_ALL=C grep -r --include='*.'{'[jJ][sS]','[Hh][Tt][Mm]'{,'[Ll]'}} \
  -Fl --null 'http:\/\/localhost:4542' . |
  xargs -r0 perl -pi -e '
    s{\Qhttp:\/\/localhost:4542\E}{https:example.com}g'

大きなダメージなしで削除するオプション(ファイルが見つからない場合はPerl警告のみを表示)に加えて、-rGNU APIの大部分をコピーするMacosでも動作します。xargsgrepgrep

おすすめ記事