Shammer's Philosophy

My private adversaria

sed コマンドで文字列編集

やっぱりコンパイルされてできあがるファイルの名前を"連番.bin"でなく、
"ファイル名.bin"にしたい、という気持ちからそれをするためのシェルを引き続き作成。
すでに配列の中にファイル名.cという名前が格納済みだからそれを利用する。
一番後ろの.cのみ取り除いてやればいい。配列の各要素が$VALUEであり、


 >echo $VALUE
 sample.c


という状況だったとして、


 >echo $VALUE | sed -e "s/.c/\$//"
 sample


という結果が得られる。sed コマンドの意味としては、変数の最後尾の.cを削除する、という意味になる。
sed のパラメータにはいくつか取り得る値がある。
今回の場合は、ファイル名の中に一度だけしか操作したい文字列 ".c" が含まれていないためあまり影響はないが、\$ 以外にも


 1.sed -e "s/.c//"
 2.sed -e "s/.c//g"


というようにもできる。
1のようにした場合は、一番最初にでてきた ".c" のみが置き換えられる。
2のようにした場合は、すべての ".c" が置き換えられる。


 >echo $VALUE
 sample.caaa.c
 >echo $VALUE | sed -e "s/.c//"
 sampleaaa.c
 >echo $VALUE | sed -e "s/.c//g"
 sampleaaa
 >echo $VALUE | sed -e "s/.c\$//"
 sample.caaa


という具合だ。これを利用して最終的に


i=0
while *1
do
 CREATE_BIN_NAME=`echo $ARRAY[$i]} | sed -e "s/^/..\/bin\//" | sed -e "s/.c\$/.bin/"`
 cc -o ${CREATE_BIN_NAME} ${ARRAY[$i]}
 i=`expr $i + 1`
done


となった。これでほぼ完成だが、、、

*1: $i < $count