正規表現の略記表現
LFSの構築手順の中に以下のような sed のコマンドがあった
sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|" \ -e "s|INCLUDE\s*= ./zlib-src|INCLUDE = /usr/include|" \ -e "s|LIB\s*= ./zlib-src|LIB = /usr/lib|" \ ext/Compress/Raw/Zlib/config.in
sed による正規表現置換の基本的な文法は以下のようになっている。
s/regexp/replacement/
/ の部分は別の文字で代用することができ、上記については | で代用している。
ここで分からなかったのが、¥s の部分。
* は直前の文字の0回以上の繰り返し。
¥s は?
上記の場合だと、置換後の文では、それぞれの行で意図的に違う数の空白を入れている。
BUILD_ZLIB = False INCLUDE = /usr/include LIB = /usr/lib
ああ、なるほど、= の位置が合うようにしている。
そうそして、元のファイルには以下のような行がある。
BUILD_ZLIB = True INCLUDE = ./zlib-src LIB = ./zlib-src
ということは、¥s は空白を示すのかな。と予想。
で、sed の man ページを見たのだが、それらしき記述はなし。
結局 Google でいろいろと探し回った結果以下のページが見つかった。
正規表現の解説 初級編
\s 空白文字 空白を表現する文字にマッチします。「[ \t\n\f\r]」と同義です。
¥s は正規表現の略記表記による空白文字ということだ。
略記表記には他にも、¥w([0-9A-Za-z_]と同義), ¥d([0-9]と同義) などいろいろあるようで、ちょっと勉強になった。