はじめに
tr コマンドは、「文字」を別の「文字」に置き換えるコマンドです。
同じようなコマンドとして、 sed コマンドの y 内部コマンドがあります。
両方のコマンドの挙動を紹介します。
検証環境
| |
tr コマンド
tr コマンドを使って、 “my name is test.” という文字を変換してみます。
tr コマンドは指定された複数の文字を、別の文字に変換するコマンドです。
具体例をもとに挙動を見ていきましょう。
例1
tr コマンドの第1引数と第2引数の文字数が同じ場合には、それぞれの文字位置が変換ルールとして対応します。
以下のルールで変換されます。
t=>ae=>bs=>c
| |
例2
tr コマンドの第2引数が第1引数の文字数よりも小さい場合は、
以下のルールで変換されます。
t=>ae=>bs=>b( 最後の変換後文字が利用される )
| |
例3
変換前の文字として同じものが複数登場した場合には、以下のルールで変換されます。
t=>ae=>bs=>ct=>d( 後勝ちとなり、こちらのルールが優先される )
$ echo 'my name is test.' | tr 'test' 'abcd'
my namb ic dbcd.
sed (y) コマンド
今度は sed コマンドの例を見ていきます。
例1
sed コマンドの第1引数と第2引数の文字数が同じ場合には、それぞれの文字位置が変換ルールとして対応します。
以下のルールで変換されます。
t=>ae=>bs=>c
| |
例2
sed コマンドの第1引数と第2引数の文字数が異なる場合には、エラーとなります。
| |
例3
変換前の文字として同じものが複数登場した場合には、以下のルールで変換されます。
t=>a( 先勝ちとなり、こちらのルールが優先される )e=>bs=>ct=>d
| |
ひとこと
個人的には tr コマンドは「変換文字数が間違っていた」場合
や「後勝ちで当初想定していたルールが上書きされてしまう」場合の挙動が直感的ではなく、
sed 'y/.../.../' コマンドのほうが好みです。
とはいえ、 sed 'y/.../.../' コマンドを利用しているコードはほぼ見たことがありません。