ファイル単位の編集では、シェルを使った方が楽な場合がありますね。
bash Tips
bashでファイル拡張子を使う方法をちょっと試してみました。
やってみたいこと
ファイルのファイル名を取得したい。例えば、aa.txtとあれば、aaだけを取り出したい。
以下の感じで、取り除けます。
1 2 3 4 5 |
>ls aa.txt > file_name=aa.txt >$echo ${file_name%.*} #.txtを取り除くという意味 aa |
反対に拡張子を抽出する場合は、こうします。
1 2 |
>$echo ${file_name#*.} #aa.を取り除くという意味 txt |
つまり、変数を%でつなぐと、後方一致
#は前方一致になります。
別の実現方法
もう少し進めると、変数に格納された文字列を変更することもできます。
sedぽく変換できます。
1 2 |
>echo ${file_name/.txt/} aa |
sedでやらすなら、一応、変数(x)に入れてみます。
>x=echo ${file_name}|sed 's/.txt//g'
>echo $x
aa
ただ、sedでやるよりは、bashの置換を使う方法の方がいいように思います。
sedを知ってる人は、頑なにsed使う人いますけど、嫌いじゃないです、、
スポンサーリンク
おまけ
じゃ、aa.txt.bkの拡張子を取り出す場合はどうするの?これまでの方法だと以下なんですが、私は、”bk"だけ取り出したかったのに、、、
思う場合もあると思うのです。
1 2 |
>echo ${file_name#*.} txt.bk |
その場合、##を使います。
1 2 |
>$echo ${file_name##*.} bk |
そうすると、最長マッチになります。これは、後方マッチ(%)の時も同じなので同じように使えます。
うーん、便利ですね。
お好みのものを覚えておくといいと思います。
余談
もはや、余談ですが、csh系だとこうやって書きます。(懐かしい、、、と思った人は、おじさんか、おばさん(笑))
1 2 3 4 5 |
> set file_name = "aa.txt" > echo $file_name:r aa > echo $file_name:e txt |
では、お後がよろしいようで。
関連記事: