22820


`dir/text1.txt`  
`dir/text2.txt`  
`dir/subdir/text3.txt`

のすべてのファイルに

`PASSWORD = '12345'`

という文字列が含まれているとして  
`dir/`以下のすべてのファイルのこの文字列を

`PASSWORD = 'abcde'`

に置換するコマンドはどのようなものなんでしょうか？


CC BY-SA 3.0
2016-03-04T21:36:53.017
22818
2016-03-05T00:27:48.513
5505
question
linux
指定したディレクトリ以下のファイルの文字列をすべて置換するコマンドは？


findとperlの組み合わせで

[code]

    find . -type f -exec perl -pi -e "s/PASSWORD = '12345'/PASSWORD = 'abcde'/g" {} \;
    
[/code]

説明

  * `find . -type f`は現在ディレクトリの下、ファイルを選択し、`-exec`でperlを実行します。

  * `perl -pi` はインプレース変換のオプションとなります。


CC BY-SA 3.0
2016-03-04T23:24:09.983
22819
2016-03-05T00:27:48.513
2016-03-05T00:27:48.513
12732
12732
22818
answer


文字列の置換ということであれば `sed` が適しているでしょう。また下記の例では `xargs`
を用いてで複数ファイルを処理するようにしています。`find -exec`
との違いは、起動するプロセス数を通常は少なくでき、実行速度の向上が見込めることです。

[code]

    find dir -type f | xargs sed -i -e "s/PASSWORD = '12345'/PASSWORD = 'abcde'/"
    
[/code]


CC BY-SA 3.0
2016-03-04T23:31:00.177
22820
2016-03-04T23:31:00.177
208
22818
answer