sh(bash)プログラミング

シェルスクリプト総合 その15
http://pc12.2ch.net/test/read.cgi/unix/1246408968/

492 :名無しさん@お腹いっぱい。 :2009/09/20(日) 20:46:49
bash又はkshで長さが一定でないファイル名からある位置の文字を取り出したい。
具体的にはhogehoge〜XX.txtのXXの2文字。後ろから5,6文字目。
前からの位置であればcutで簡単だったのだが後ろからで行き詰った。
考えた挙句、echo ファイル名 | wc -c等で長さを取って、
それをexprで6減算した値をcutの開始位置にしてやったりして出来たのだが
たかが2文字取り出すだけなのにスマートじゃない。
もっとシンプルに行かないものでしょうか?

493 :名無しさん@お腹いっぱい。 :2009/09/20(日) 21:00:31
>>492
expr 'hogehoge〜XX.txt' : '.*\(..\).txt'

496 :名無しさん@お腹いっぱい。 :2009/09/21(月) 10:57:39
>>492
fにファイル名が入っているとして
a=${f#${f%??.txt}}
echo ${a%.txt}
ではどうか。

497 :名無しさん@お腹いっぱい。 :2009/09/21(月) 13:03:33
bashでいいなら、
↓で一発じゃん (fileにファイル名が入っているとして)

echo ${file:$((${#file}-6)):2}