shellのTips
初期値設定
引数が設定されていなかったら、指定した初期値を設定して処理を続ける
func(){ local arg1=${1:-default1} echo $arg1 }
変数を指定した場合
$ func test test
指定していない場合
$ func default1
文字列から指定した文字を削除する
先頭、もしくは末尾からであれば、sedやperlを使うまでもない。
先頭の場合には、「#」末尾の場合には「%」を使う
target="1234567890"
先頭の123を削除
echo ${target#123}
末尾の890を削除
echo ${target%890}
先頭の3文字を削除
echo ${target#???}
末尾の3文字を削除
echo ${target%???}
先頭の4までを削除
echo ${target#*4}
末尾の7までを削除
echo ${target%7*}
ファイル target.txt の各行から先頭の3文字をなくしたものを result.txt に保存
cat target.txt | while read n do echo ${n#???} done > result.txt
sedの場合
cat target.txt | sed -e 's/^...//' > result.txt
perlの場合
cat target.txt | perl -nlpe 's/^...//' > result.txt
パス区切り文字列の場合
親ディレクトリのパスを取得するなら
dirname $filepath
ファイル名だけ取りだすなら
basename $filepath
拡張子を切りとるなら
basename $filepath .txt
NSDateの件
文字列からNSDateを生成
NSDateFormatter *f = [[[NSDateFormatter alloc] init] autorelease]; [f setDateFormat:@"yyyy-MM-dd"]; return [f dateFromString:string];
NSDateから曜日を取得
NSCalendarからNSDateComponentsを取得する
NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *c = [calendar components:NSWeekdayCalendarUnit fromDate:date]; return [c weekday];
weekdayは1から7までの数値。それぞれ、日曜日から土曜日に対応している。
上記例では、compontensにNSWeekdayCalendarUnitのみしか指定していない為、weekdayしか取得できない。
その他のプロパティ(year,month,day,hour,min,sec等)を取得する場合には、下記のようにする
NSDateComponents *c = [calendar components: NSYearCalendarUnit |NSMonthCalendarUnit |NSDayCalendarUnit |NSHourCalendarUnit |NSMinuteCalendarUnit |NSSecoundCalendarUnit |NSWeekdayCalendarUnit fromDate:date];
各CalendarUnitはXcodeが補完してくれる。それをビット演算子「|」で繋ぐ。
NSWeekdayCalendarUnitとNSWeekCalendarUnitは違うので注意。