• twitter
  • facebook
文学・歴史資料のデジタル加工入門

大量置換のためのツール sed を用いて その1【文学・歴史資料のデジタル加工入門10】 (木越 治)

●正規表現における「*」と「+」について

前に書いたように正規表現において「*」は「直前の文字の0回以上の繰り返し」だから、この指定だと、第一フィールドにデータが入っていない場合も想定している。もし、必ずデータがあるというふうに指定したければ、

[^,][^,]*,

というふうに[^,]を繰り返す必要がある。今回用いた Windows に付属しているツール「findstr」は、

https://www.k-tanaka.net/cmd/findstr.php

に出ているオプション解説によると、正規表現の「+」(1文字以上の繰り返し)は使えない仕様のものらしいので、こうせざるをえないが、「+」を使えるツールだと、「+」は、「直前の文字の1回以上の繰り返し」を意味するから、

 [^,]+,

とすることによって、なんらかのデータの入っているフィールドを指定できる。

なお、実際のコマンド入力の際には、

>findstr “^[^,]*,[^,]*,[^,]*菊花の約” akinari.csv

というふうに、検索パターンの前後を「”」ないし「’」でくくってやらないといけない。
前記頁に出ている findstr オプション一覧によると、検索パターンによっていろいろなオプションがあるらしいが、ファイルを利用して指定するスル方法さえ覚えておけばよい。 awk や、後述する  sed のような UNIX 由来のツールでは、「-f」 オプションを付けて検索パターンファイルを指定する方法が一般的だが、findstrは、MS-DOS独自のツールなので、

/g:

という形式になるらしい。いずれにしても、

^[^,]*,[^,]*,[^,]*菊花の約

というパターンを「kiku.grp」というファイルに保存し、

>findstr /g:kiku.grp akinari.csv

とすることで、ファイルにある検索パターンを使った検索ができるわけである。こうすれば、半角アルファベットを入力するだけですむ。めんどうな正規表現パターンを含む検索は、こういうふうにファイルに書き込んでおき、そのファイルを指定するという方法でやる方が安全である。今回いろいろ研究していたときも、「,」「.」「^」「~」などの入力を間違えたために、なにも検索されず、コマンドラインをなんども見直して検索パターンのあやまりを点検するということがあった。そういうことを防ぐためにも、ファイルを指定して検索させる方法を知っていれば、検索パターンの間違いを探すのも楽である。