アプリ版:「スタンプのみでお礼する」機能のリリースについて

目的がファイル名から拡張子を取り除きたいのですが
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

以上、よろしくお願い致します。

A 回答 (4件)

expr コマンドの 「expr 文字列 : 正規表現」書式で正規表現中で \( \) が使われていた場合は、それに囲まれた範囲が結果として出力されます。

このことは、man expr で調べられます。

あとは、 . 任意の文字列、 * 直前の0回以上の繰り返し、 \. ピリオド文字
というのがわかれば、ピリオドの直前までの文字列を取り出すことがわかると思います。

また、拡張子が .sh だということがわかっていれば、
basename hoge.sh .sh
でhogeが得られます。
    • good
    • 0
この回答へのお礼

ご回答有り難うございます。
> * 直前の0回以上の繰り返し
だから expr `basename hoge.sh ` : '\(*\)\.' の時は
直前の文字が無いので( (が有るがこの(はexprとしての特別な書式の為無視される?! )、指定したい文字を表す事が出来ない理由で
出力が無い動作になるのだろうと、何となくですが理解できました。
\( \) 以降の\.ピリオド文字を含めた、
それ以降の文字は不要であると明示している事もわかりました。

お礼日時:2007/08/10 09:17

ちなみに \( と \) は一般的な正規表現と違います。


あとは、.* と \. が分かれば理解できると思います。

参考URL:http://www.linux.or.jp/JM/html/gnumaniak/man1/ex …
    • good
    • 0
この回答へのお礼

ご回答有り難うございました。
> ちみに \( と \) は一般的な正規表現と違います。

この事を認識していなかったので
理解する上で糸口となりました。

お礼日時:2007/08/10 09:21

>調べられない理由って


まぁまぁ
当人が解答を得られる手助けをしてあげようよ

ということで
http://www.google.co.jp/search?q=%E6%AD%A3%E8%A6 …
    • good
    • 0

「正規表現」だってわかっているんだったら検索すればいいと思うんだが.


調べられない理由って何でしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!