特定語句を含むファイルの抽出とその一括変換
repositoryは「リポジトリ」と表記するのが順当のよう。
「レポジトリ」としていた表記を「リポジトリ」に改めるため、ブログ投稿内で「レポジトリ」を用いているものを調べてみた。
source/_postsで端末を開き、下記コマンドで抽出。
$ grep "レポジトリ" *
*
ですべてのファイルを検索対象に。
.mdファイルのみを対象にするなら*.md
に。
またサブディレクトリ以下を再帰的に検索する場合は
$ grep -r "検索ワード" *
たくさんあって手作業で修正するのは大変そうなので、下記コマンドですべての.mdファイル内の「レポジトリ」を「リポジトリ」に一括変換。(元ファイルは拡張子.bakを付けてバックアップ)
$ perl -p -i.bak -e 's/レポジトリ/リポジトリ/g' *.md
正常に変換されたことを確認後、.bakファイルを一括削除。
$ find ./ -type f -name "*.bak" -delete
もし不具合があれば、特定のファイルに対しては下記で復帰可能。
(example.md.bakをexample.mdに名称変更し上書き)
$ mv example.md.bak example.md
ただし、mvコマンドは複数のファイル名の一括変換は出来ないようなので、すべてのファイルを元に戻す場合は、一旦すべての.mdファイルを削除してから、すべての.md.bakファイルの拡張子を.mdに変換。
(renameコマンドは上書きは出来ないようなので)
$ find ./ -type f -name "*.md" -delete
$ rename .md.bak .md *.bak
以前はrename 's/.md.bak/.md/' *.bak
でファイル名を一括変換出来てたと思うのだが、rename .md.bak .md *.bak
でないと上手くいかない。
(参照記事)
Linuxコマンド逆引き大全 - 【 ファイルから文字列を検索する 】:ITpro
複数ファイル内の文字列を置換して上書き保存する
ーー
(追記)
perlで語句を一括変換する際、複数のファイルを対象にしたい時は、間に半角スペースを入れて列記。
(複数ファイルの時も正規表現が可能)
$ perl -i -p -e 's/置換前の語句/置換後の語句/g' A.html B.xml
$ perl -i -p -e 's/置換前の語句/置換後の語句/g' *.html *.xml *.txt