文字列の中から所定の位置にある文字列のみを抜き出したい場合はcutを利用する。cutの主なオプションは表の通り。
オプション |
意味 |
-b バイト数 |
指定したバイト数の文字を取り出す。バイトの指定には「開始位置-終了位置」のように範囲で指定できる |
-c 文字数 |
指定した文字数の文字を取り出す。文字数の指定には「開始位置-終了位置」のように範囲で指定できる |
-d デミリタ |
デミリタ(区切り文字)を指定する。初期値はタブ |
-f フィールド |
指定したフィールドの文字を取り出す。フィールドの指定には「開始位置-終了位置」のように範囲で指定できる |
-s |
デミリタの無い行は無視する |
たとえば,変数の値の5文字目を取り出したい場合は,
$ string="Nikkei Linux"
$ echo $string | cut -c 5
e ← 5文字目の「e」が取り出せた
|
とする。
また,指定する文字数を「開始位置-終了位置」のように記述することで,取り出す文字列の範囲を指定できる。たとえば,以下のようなシェル・スクリプト「cut_perm.sh」があったとする。
#!/bin/sh
temp=`ls -l $1`
pram=`echo $temp | cut -c 2-10`
echo $pram
|
このスクリプトは指定したファイルの情報をls -lで表示し,その中のパーミッション部分を取り出している。
$ ./cut_perm.sh document.txt
rw-r--r--
|
cutコマンドはフィールドごとにも切り出せる。フィールドとは特定の区切り文字(デミリタ)で区切られた文字列のことだ。たとえば,
のようになっていた場合,区切りをスペースとすると,「Fukuda」,「Hata」,「Sueyasu」の3つのフィールドに別れる。
たとえば,以下のようなシェル・スクリプト「cut_date.sh」があったとする。
#!/bin/sh
temp=`ls -l $1`
pram=`echo $temp | cut -d " " -f 6-8`
echo $pram
|
このスクリプトは指定したファイルの情報をls -lで表示し,その中の編集日時部分を取り出している。
$ ./cut_date.sh document.txt
Mar 8 12:31
|
また,cutで「-d " "」としているのは区切りをスペースに変更するためだ。