findとsedを組み合わせて置換する
deck.jsを最新版にした際にハマったのでメモ。
やりたいことは、任意のフォルダにあるスライド(index.html)を再帰的に探して、
jquery-1.7.min.js
を、
jquery-1.7.2.min.js
にしたいだけ。
このページを参考にさせて貰いました。
findコマンドで再帰的にファイル削除 – オムニオラボ
例えば、こんな感じで格納されているファイルの中から、
“*.txt”を探して、そのファイルの中身の”abc”を”123″にする手順
. ├── 1 │ ├── aaa.txt │ └── bbb.txt ├── 2 │ ├── ccc.txt │ └── ddd.txt └── 3 └── eee.txt
“aaa.txt”,”bbb.txt”,”ccc.txt”,”ddd.txt”の中身は、
abc
“eee.txt”の中身は、
123
1. 拡張子が”.txt”を再帰的に探す
$ find . -name "*.txt"
2. sedを使って、該当箇所の置換結果を出力する
$ find . -name "*.txt" | xargs sed -n s/abc/123/p
3. sedを使って、(バックアップをしないで)置換処理を行う
$ find . -name "*.txt" | xargs sed -i "" s/abc/123/
まとめ
まずは、数文字程度しかないファイルを用意して、
置換する前と後を、以下のコマンドで確認しながら練習すると良い。
$ find . -name "*.txt" | xargs cat
あらかじめバックアップを取ってない場合は、
手順(3.)の-iオプションには、””ではなく、”.bak”を指定して、
置換処理と同時に、置換前のバックアップを取った方が良い。
最後に、MacOS Xで動作確認できたコマンドは以下の通り。
$ find . -name "*.html" | xargs sed -n s/1\.7\.min/1.7.2.min/p
$ find . -name "*.html" | xargs sed -i "" s/1\.7\.min/1.7.2.min/
実は、ここまで来る過程で、
置換した結果の2行以外すべて消えちゃうってことがあったので、
初めての場合は、バックアップを取ってから作業するのが良いと思う。
おしまい。
Leave a Comment