URL を sed で再帰的に検索して置換する

URL を sed で再帰的に検索して置換する

完全な URL スキームを置き換える必要がある大量のファイルがあります。一部のファイル名にはスペースが含まれています。何度も検索し、試行錯誤した結果、これが最も近いものになりました。

find /somedir -type f -print0 -exec sed -i'' -e 's#http\\:\\/\\/domain.com#https\\:\\/\\/www.domain.com#g' {} +

結果のファイルではスキームhttp:が削除され、次の部分が残ります//- つまり「//www.domain.com」

-eさらに、ファイル名に追加される新しいファイルが作成されます。つまり、some file.php-eこれは明らかに不要です。

確かにこれで十分でしょうが (*-eファイルを削除した後)、私の中の強迫性障害は、これを正しく行う方法を本当に知りたいと思っています。注: 私は Mac でローカルに作業していますが、Linux でもこれを実行します。

どのようなアイデアでも大歓迎です!

答え1

解決策1: 1つの方法は、find以下を使用することですxargs:

find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'

解決策2find: もう 1 つは、を使用することです-exec。これは、あなたの質問と非常に似ています。

find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +

sedどちらのソリューションも、複数のファイルを引数として呼び出します。したがって、sedすべてのファイルに対して 1 回呼び出されるのではなく、すべてのファイル セットに対して呼び出されます。

解決策3: の代わりに、検索置換ジョブに をsed使用することもできます。perl

perl -i -pe 's#http://domain.com#https://www.domain.com#g' file

find/コマンドと組み合わせるとxargs:

find /dir -type f -print0 | xargs -0 perl -i -pe 's#http://domain.com#https://www.domain.com#g'

関連情報