シェルスクリプトで部分文字列を切り出す方法

例:"myokoym(25)"の括弧内の数字だけを取り出したい場合。

1.cutを使う

http://www.k4.dion.ne.jp/~mms/unix/linux_com/cut.html

$ echo "myokoym(25)" | cut -d"(" -f2 | cut -d")" -f1
25

上記は、cutコマンドを区切り文字指定で使用する例です。
「-dオプションで区切り文字を指定し、-fオプションでn番目に区切られている文字列を切り出す」という処理を2回繰り返しています。(nは1から始まる)


2.sedを使う

http://www.k4.dion.ne.jp/~mms/unix/linux_com/sed.html

$ echo "myokoym(25)" | sed -e "s/^.*(\(.*\)).*$/\1/"
25

上記はsedのsコマンドで、文字列の置換を行っています。
文法は、「s/置換前/置換後/」です。

上の例では、正規表現を使って処理しています。おおまかな流れは、

  • 行頭「^」から行末「$」までを置換対象とする。
  • 開き括弧「(」と閉じ括弧「)」で囲まれた文字列「\(.*\)」へ置換する。(「\(」と「\)」で囲むと、\1に格納される)

といった感じです。



どちらを使っても実現可能ですが、わかり易さではcut、柔軟性ではsedが上かと思います。