テキストエディタのGrepで複数ファイルを置換するときは、先に検索結果を「どのファイルの、どの行で、何件変えるか」へ分解します。全21件を一括変更するのではなく、本文10ファイルの16件を承認し、引用資料2ファイルの5件を除外してから、対象フォルダだけを置換します。
この記事の中心は一括置換の速さではありません。Grep結果一覧を読み、ファイル単位で採用・除外を決めることです。検索範囲はapproved/に固定し、excluded/は置換対象にしません。
検索結果をファイルごとに読む
最初の一覧では、一致件数だけでなくファイル名と行の文脈を見ます。承認した10ファイルの内訳は次のとおりです。
| ファイル | 検索結果の件数 | 文脈判断 | 置換対象 |
|---|---|---|---|
app-01.md |
2 | 本文の旧表記 | 2 |
app-02.md |
2 | 本文の旧表記 | 2 |
app-03.md |
2 | 本文の旧表記 | 2 |
app-04.md |
2 | 本文の旧表記 | 2 |
app-05.md |
2 | 本文の旧表記 | 2 |
app-06.md |
2 | 本文の旧表記 | 2 |
app-07.md |
1 | 本文の旧表記 | 1 |
app-08.md |
1 | 本文の旧表記 | 1 |
app-09.md |
1 | 本文の旧表記 | 1 |
app-10.md |
1 | 本文の旧表記 | 1 |
| 合計 | 16 | 承認範囲 | 16 |
一方、引用として残すquote-01.mdには3件、quote-02.mdには2件ありました。こちらは合計5件です。式は21 = 16 + 5になります。この式が合わないうちは置換へ進みません。
採用は一致行ではなくファイル単位で決める
検索結果に旧表記があるだけでは、置換してよいとは限りません。引用、固有名、過去の発言、比較用の旧稿では、旧表記を残す意味があります。
判断手順は次のとおりです。
- 検索起点を作品フォルダへ固定し、対象拡張子を本文形式に絞ります。
- 21件をファイル名と行番号で並べ、前後の一文を読みます。
- ファイルごとに「本文として更新」「引用として保持」「判断保留」を付けます。保留が一件でもあるファイルは承認フォルダへ入れません。
- 承認した10ファイルだけを
approved/へ置き、引用2ファイルはexcluded/へ分けます。 approved/をもう一度検索して16件、excluded/を検索して5件であることを確認します。
この時点で置換対象は「作品全体」ではなく「確認済み10ファイル」です。フォルダを固定することで、操作時に再び21件全体へ範囲が広がるのを防ぎます。
結果一覧では、同じ行に二つ一致がある場合も件数を二つとして読みます。ファイル名だけを数えると、app-01.mdの2件を1件と誤認し、10ファイルだから10件だと思い込みます。行番号、行内の一致位置、前後の文を一件ずつ確認し、ファイル末尾に小計を書きます。app-01.md: 2からapp-10.md: 1までの小計を足して16になり、引用側の3と2を足して5になることを、置換範囲を選ぶ直前に再計算してください。
16件だけを変更し、二方向に検索する
置換前の下見で変更予定が10ファイル・16件になったら実行します。失敗ファイルが0件であることも確認します。
変更後は二つの検索を行います。
approved/で旧表記を検索し、0件であることexcluded/で旧表記を検索し、5件のままであること
旧表記0件だけを見て終えると、引用5件まで消した事故を見逃します。合格式は「承認範囲の旧表記0件、除外範囲5件」です。新表記16件の検索も加えると、置換数の取り違えを見つけやすくなります。
Rune Studioで得られた結果
Rune Studioの現行Mac版は、ワークスペース内をファイル・行ごとに横断検索し、結果確認後に置換する機能を持つと公開資料に記載されています。検索範囲を選択したファイルやフォルダへ限定することもできます。
今回の確認では、approved/の10ファイルから16件を検索し、下見でも10ファイル・16件を確認してから置換しました。置換後の逆検索は0件です。別にした引用2ファイルは合計5件のままでした。つまり、21 = 16 + 5と、変更後の0 + 5が対応しています。
文脈の意味判断はアプリが行ったものではありません。人が先に本文と引用を分け、Rune Studioの操作範囲を承認フォルダへ限定しました。正規表現の全仕様、バイナリファイルの置換、意味判断の自動化はこの記事の範囲外です。
Grepは置換ボタンより結果一覧が主役
複数ファイル置換で事故を減らす判断基準は、総件数を覚えることではありません。各ファイルの文脈を読み、承認範囲16件と除外5件を別の箱へ分け、変更後に0件と5件を再確認することです。
まず検索結果をファイル名でまとめ、21 = 16 + 5のように採否を一致させてください。Rune Studioの横断検索を候補にする場合は、現行Mac版について詳しくはこちらで確認できます。