- ベストアンサー
正規表現 '\(.*\)\.' の意味
目的がファイル名から拡張子を取り除きたいのですが expr `basename hoge.sh ` : '\(.*\)\.' で標準出力の結果が hoge となり目的を達成する事ができました。 しかし '\(.*\)\.' の意味がよく理解出来なくて悩んでおります。 色々と試してみた結果になりますが expr `basename hoge.sh ` : '\(*\)\.' .を取ってみた 出力無し expr `basename hoge.sh ` : '\(.*\) .\を取ってみた hoge.sh expr `basename hoge.sh ` : '\(.*\).' \を取ってみた hoge.s expr `basename hoge.sh ` : '\(...\)\.' ...にした 出力無し expr `basename hoge.sh ` : '\(....\)\.' ....にした hoge 以上、よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
expr コマンドの 「expr 文字列 : 正規表現」書式で正規表現中で \( \) が使われていた場合は、それに囲まれた範囲が結果として出力されます。このことは、man expr で調べられます。 あとは、 . 任意の文字列、 * 直前の0回以上の繰り返し、 \. ピリオド文字 というのがわかれば、ピリオドの直前までの文字列を取り出すことがわかると思います。 また、拡張子が .sh だということがわかっていれば、 basename hoge.sh .sh でhogeが得られます。
その他の回答 (3)
- shirayukix
- ベストアンサー率43% (90/207)
ちなみに \( と \) は一般的な正規表現と違います。 あとは、.* と \. が分かれば理解できると思います。
お礼
ご回答有り難うございました。 > ちみに \( と \) は一般的な正規表現と違います。 この事を認識していなかったので 理解する上で糸口となりました。
>調べられない理由って まぁまぁ 当人が解答を得られる手助けをしてあげようよ ということで http://www.google.co.jp/search?q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&hl=ja&lr=lang_ja
- Tacosan
- ベストアンサー率23% (3656/15482)
「正規表現」だってわかっているんだったら検索すればいいと思うんだが. 調べられない理由って何でしょうか?
お礼
ご回答有り難うございます。 > * 直前の0回以上の繰り返し だから expr `basename hoge.sh ` : '\(*\)\.' の時は 直前の文字が無いので( (が有るがこの(はexprとしての特別な書式の為無視される?! )、指定したい文字を表す事が出来ない理由で 出力が無い動作になるのだろうと、何となくですが理解できました。 \( \) 以降の\.ピリオド文字を含めた、 それ以降の文字は不要であると明示している事もわかりました。