Bashシェルスクリプトで大文字<=>小文字の変換方法いろいろ
前回 大文字あるいは小文字専用の変数を作成する方法について 触れたので、 文字列の大文字<=>小文字の変換方法 について紹介します。
Contents
tr
コマンドを使う方法
おそらく最も古典的かつベーシックな方法です。
全文を変換
# 大文字→小文字
$ echo 'Hello World!' | tr '[:upper:]' '[:lower:]'
hello world!
# 小文字→大文字
$ echo 'Hello World!' | tr '[:lower:]' '[:upper:]'
HELLO WORLD!
一部変換
おそらく tr
を使う方法ではできないのでは?
sed
コマンドを使う方法
こちらも比較的よく見る方法です。
ポイントは \L
と \U
。
置換したい文字列を指定する箇所の先頭に付与すると、 L
の場合には小文字に、 U
の場合には大文字に変換されます。
全文を変換
# 大文字→小文字
$ echo 'Hello World!' | sed 's/.\+/\L\0/'
hello world!
# 小文字→大文字
$ echo 'Hello World!' | sed 's/.\+/\U\0/'
HELLO WORLD!
一部を変換
最初の単語のみに適用。
# 大文字→小文字
$ echo 'Hello World!' | sed 's/^\(\w\+\)\+/\L\1/'
hello world!
## 見にくい場合は拡張正規表現オプションを付けるとよい
$ echo 'Hello World!' | sed -E 's/^(\w+)+/\U\1/'
hello World!
# 小文字→大文字
$ echo 'Hello World!' | sed 's/^\(\w\+\)\+/\U\1/'
HELLO World!
## 見にくい場合は拡張正規表現オプションを付けるとよい
$ echo 'Hello World!' | sed -E 's/^(\w+)+/\U\1/'
HELLO World!
Bash の変数の展開機能を使う
Bash 4.0 以降では、構文として変数の値参照時に大文字<=>小文字の変換が可能です。
デメリットは変数として使うため、一度代入しておかないといけないこと。while read
ループと組み合わせて使う場合に便利です。
全文を変換
変数の参照時にオプションを指定します。
意外と覚えやすい。 ,,
は下を向いているので小文字に変換され、 ^^
は上を向いているので大文字に変換されます。
# 大文字→小文字
$ X='Hello World!'; echo "${X,,}"
hello world!
# 小文字→大文字
$ X='Hello World!'; echo "${X^^}"
HELLO WORLD!
先頭 1 文字を変換
先頭一文字だけを変換する事もできます。
# 大文字→小文字
$ X='HELLO'; echo "${X,}"
hELLO
# 小文字→大文字
$ X='world'; echo "${X^}"
World
一部を変換
read
との組み合わせになるかな。
読みにくい。。
# 大文字→小文字
$ read S1 SN <<<$(echo 'Hello World!'); echo "${S1,,} $SN"
hello World!
# 小文字→大文字
$ read S1 SN <<<$(echo 'Hello World!'); echo "${S1^^} $SN"
HELLO World!
awk
を使う
awk
を使ってもできます。
# 大文字→小文字
$ echo 'Hello World!' | awk '{print tolower($0)}'
hello world!
# 小文字→大文字
$ echo 'Hello World!' | awk '{print toupper($0)}'
HELLO WORLD!
ひとこと
個人的には sed
の方法が汎用的で好きです。
ディスカッション
コメント一覧
まだ、コメントがありません