【Linux】複数ファイル内の文字列を一括置換

テストファイル作成

$ mkdir replace_test

$ vim replace_test/file_name_01.txt
test_before

$ vim replace_test/file_name_02.txt
test_not_replace

$ mkdir replace_test/dir

$ vim replace_test/dir/file_name_03.txt
test_before

$ vim replace_test/dir/file_name_04.txt
test_not_replace

$ tree replace_test
replace_test
|-- dir
| |-- file_name_03.txt
| `-- file_name_04.txt
|-- file_name_01.txt
`-- file_name_02.txt

1 directory, 4 files

find、grep、sedコマンドで再帰的に置換し、置換後のファイルを「ファイル名_old」として出力

find replace_test/ -name "*file_name*" | xargs grep -l 'before' | xargs sed -i_old -e 's/before/after/g'

結果確認

$ tree replace_test
replace_test
|-- dir
| |-- file_name_03.txt
| |-- file_name_03.txt_old
| `-- file_name_04.txt
|-- file_name_01.txt
|-- file_name_01.txt_old
`-- file_name_02.txt

1 directory, 6 files

$ diff replace_test/file_name_01.txt replace_test/file_name_01.txt_old
1c1
< test_after
---
> test_before

$ diff replace_test/dir/file_name_03.txt replace_test/dir/file_name_03.txt_old
1c1
< test_after
---
> test_before

置換前ファイル削除

$ find replace_test/ -name "*file_name*_old" | xargs rm -f

$ tree replace_test
replace_test
|-- dir
| |-- file_name_03.txt
| `-- file_name_04.txt
|-- file_name_01.txt
`-- file_name_02.txt

 

コメント投稿は締め切りました。