• ベストアンサー

正規表現*について

LPICレベル1 翔泳社の本を参考にして試験対策をしていますが、p121の0回以上繰り返えす*でab*zでマッチするのが「az」「abz」「abbz」とあります。しかし、「az」はlsコマンドで試してみましたが引っかかりません。 この本が間違っているのでしょうか? シェルはbashを用いています。(REDHAT9) 回答のほどよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

シェルによって違うというよりは「正規表現」と「シェルのワイルドカード」が違うんです。シェルのファイル名の展開に使用する * や ? や [a-z] のようなものは正規表現とは違います(強いて言えば簡略化された正規表現です)。また、だいたいの有名なシェルは Bourne Shell (sh) の影響を受けており、ワイルドカードの規則はほぼ同じです(というか私は違うのを知りません)。 > aではじまりzで終わるファイルをdir1/からdir2へ移したい場合 それは mv dir1/a*z dir2 で出来ます。 *の部分は0文字以上の任意の文字列です。(これを正規表現で書くとしたら.*になります)。

yukikundesuyo
質問者

お礼

回答ありがとうございます。 とりあえずよく分かってよかったです。 本当に感謝です。

その他の回答 (1)

  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.1

bashの * と正規表現の * は意味が違います。 シェルでは*は「任意の文字列」という意味で使われます。ですから、 # ls ab*z は「abz」「abcdefbz」「abhogehogez」などに引っかかります。

yukikundesuyo
質問者

お礼

回答ありがとうございます。 シェルによって違うなんてややこしいですね。 LPICの勉強がしにくいです! とりあえず、通常のシェルは教科書どおりということを理解しておきます。

yukikundesuyo
質問者

補足

回答ありがとうございます。 ではほかのシェルでaではじまりzで終わるファイルをdir1/からdir2へ移したい場合、mv /dir1/a*v /dir2ではaから始まらないファイルも移動してしまうことになりますよね。ではどうしたらいいのでしょうか?

関連するQ&A