「Unix という考え方」を読んで気になった expr コマンドのこと
60 ページのユーティリティリストに expr
の紹介があった。
expr ある文字列から別の文字列の一部を抽出する
expr
ってコマンドライン計算機じゃなかったっけ? と思って man を見たら、:
演算子を使って、文字列の抽出ができると書いてある。
たとえば、
$ expr "abcd" : "a\(.*\)" bcd $ expr "abcd" : "a.*" 4
:
の右辺に 基本正規表現 を書いて、抽出したいパターンを "\( \)" で囲むと抽出されるようだ。"\( \)" で囲まない場合は、マッチした文字数が出力される。正規表現は暗黙に "^" が指定されているようだ。
Perl でいうところの $1
しか使えないものの、ワンライナーでさくっとやりたいときには使えるかもしれない。実際にやるとしたら、以下のようになるだろう。
$ command | xargs -n1 -I% expr % : hogehoge
Perl のほうがいいかも・・・