今では仕事の編集もMacVimでしているが、この作業内で正規表現を使うことが多くなってきた。
この前のPerl入学式では正規表現、けっこう難関として説明されていた気はするが、普段から使うようになると、少なくとも基礎的なことはそんなに苦しくもないというか、身につきやすいような気はしている。
というかたぶん、以前にけっこうみっちり読んだ『実践Vim』に正規表現にまつわるいろんな方法が説明されていて、それがわかりやすかった&使えた&使ってる、から比較的ハードル低めなものとして取り組めているのかもしれない。
たとえばまさに今やっていたこととして、何百行という名簿的なデータがあって、
名前1: 説明1〜あーだこーだ〜
名前2: 説明2〜あーだこーだ〜
名前3: 説明3〜あーだこーだ〜
(以下延々と・・)
これの行頭に「■」を入れたかったので、まず
:%s/^/■/g
として、すべての行頭に「■」を入れて、
■名前1: 説明1〜あーだこーだ〜
■
■名前2: 説明2〜あーだこーだ〜
■
■名前3: 説明3〜あーだこーだ〜
■
(以下延々と・・)
次に、以下のようにして「■」の後に文字列がない行(この例だと偶数行)を、空行にした。
:%s/^■[\n]/\r/g
すると、こうなる。
■名前1: 説明1〜あーだこーだ〜
■名前2: 説明2〜あーだこーだ〜
■名前3: 説明3〜あーだこーだ〜
(以下延々と・・)
OK!!
と、言いたいところだけど、本当は最初のアクションですべて一度に終わらせたかったわけで、しかし何通りか試してみたもののちょっと分からなかったので潔く2工程に分けたのだった。
具体的に言うと、最初のアクション時に以下のようにすることで、
:%s/^[^\s]/■/g
一応空行以外にヒットするんだけど、これを実行すると、こういう残念なことになる。
■前1: 説明1〜あーだこーだ〜
■前2: 説明2〜あーだこーだ〜
■前3: 説明3〜あーだこーだ〜
■以下延々と・・)
なので、行頭の文字をつぶさずに、その前に「■」を挿し込む方法をいくつか試してみたけどすぐには捕まらなかった、みたいな感じだった。
そして結果的に捕まりはしなかったが(2工程に分かれたが)、そうやってゲーム感覚的にでも頻繁にそれがどういう構造になっているのだか考えながら触れていたりすると、ある程度のレベルまでなら身についていくんじゃないか、そうなったらいいなみたいなことを思っている。
追記1: よく考えたらタイトルにある「日本語」あまり関係なかったが(何語でもいい)、ようは日常的な文字入力に関わる作業でも地味に正規表現を使って効率化をはかれるという話。
追記2: ワンアクションでの解法、コメント欄で教えて頂きました! ありがとうございます!