困ったこと
以下のような構造のフォルダ内のテキストファイル(text1.txt~tex4.txt)内の文字列を一括で置換したい.
├─dir_parent
│ ├─dir_child1
│ | ├─text1.txt
│ | └─text2.txt
│ └─dir_child2
│ ├─text3.txt
│ └─text4.txt
解決策
以下の手順で解決可能
1.cd
コマンドを使用して、置換対象のテキストファイルが含まれる親フォルダに移動する.
2.以下のコードを実行.フォルダ内の文字列hageがhogeに置換される.
find . -type f -name "*.txt" | xargs sed -i '' 's/hage/hoge/g'
応用すると複数の文字列も置換可能
find . -type f -name "*.txt" -exec sed -i '' -e 's/2022\/3\/4/2023\/3\/3/g' -e 's/2022\/4\/6/2024\/4\/5/g' {} +
少し解説
find
でカウントディレクトリ内の置換対象のテキストファイルのリストを作成する.
今回であれば全ての.txt
ファイル.
find . -type f -name "*.txt"
xargs
で標準入力から受け取った値を引数に渡す.(らしい)
sed -i
で文字列の置換を直接行う.