読者です 読者をやめる 読者になる 読者になる

「Unix という考え方」を読んで気になった expr コマンドのこと

60 ページのユーティリティリストに expr の紹介があった。

expr      ある文字列から別の文字列の一部を抽出する

expr ってコマンドライン計算機じゃなかったっけ? と思って man を見たら、: 演算子を使って、文字列の抽出ができると書いてある。

たとえば、

$ expr "abcd" : "a\(.*\)"
bcd

$ expr "abcd" : "a.*"
4

: の右辺に 基本正規表現 を書いて、抽出したいパターンを "\( \)" で囲むと抽出されるようだ。"\( \)" で囲まない場合は、マッチした文字数が出力される。正規表現は暗黙に "^" が指定されているようだ。

Perl でいうところの $1 しか使えないものの、ワンライナーでさくっとやりたいときには使えるかもしれない。実際にやるとしたら、以下のようになるだろう。

$ command | xargs -n1 -I% expr % : hogehoge

Perl のほうがいいかも・・・