Mar 25, 2014
キャピタライズ
	英単語の先頭を大文字に置換する処理をキャピタライズというが、
	このキャピタライズ処理を unix 標準のコマンドで実装しようという話。
	置換と言えばまず思い浮かぶのが sed (1) なのだが、
	GNU 拡張された sed (1) の場合は簡単に置換が可能なのだが、
	FreeBSD の標準の sed (1) では簡単にいかない。
	
- GNU sed の場合
- 
			$ echo "foo" | sed 's/\(.\)\(.*\)/\U\1\L\2/g' Foo GNU 拡張された sed (1) には \U と /L という 演算子があるので大文字、小文字変換が簡単に可能である。
- FreeBSD 標準の sed の場合
- 
			$ echo "foo" | sed 's/\(.\)\(.*\)/\U\1\L\2/g' UfLoo FreeBSD 標準の sed (1) だと正しく変換されない。
 
- awk を利用した場合
- 
			sed (1) ではなく awk (1) を利用すれば
			FreeBSD でもキャピタライズ処理は簡単にできる。
			$ echo "foo" | awk '{ print toupper(substr($0, 1, 1)) substr($0, 2, length($0) - 1) }' Foo awk (1) には大文字変換関数が実装されているので、 切り出した1文字目を大文字変換すれば簡単に実現できる。
- FreeBSD で sed を利用した場合
- 
			どうしても FreeBSD の sed (1) を利用したい場合、
			tr (1) も併用する事にはなるが以下の処理で可能だ。
			$ eval `echo "foo" | sed 's/\(.\)\(.*\)/\/bin\/echo -n \1 | tr "[a-z]" "[A-Z]"; echo \2/g'` Foo sed (1) でtr (1) を利用した置換スクリプトを出力して eval (1) で実行した結果を表示しているのだが もはやネタとしか思えなくもない。
 良い子は真似しないで下さい(笑
Edit this entry...
wikieditish message: Ready to edit this entry.
A quick preview will be rendered here when you click "Preview" button.

