Bashシェルスクリプトで大文字<=>小文字の変換方法いろいろ

2023-02-15Bash,CentOS,Linux,Ubuntu

前回 大文字あるいは小文字専用の変数を作成する方法について 触れたので、 文字列の大文字<=>小文字の変換方法 について紹介します。

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 の方法が汎用的で好きです。

2023-02-15Bash,CentOS,Linux,Ubuntu