tr
は、標準入力から文字を変換、削除、およびスクイーズし、結果を標準出力に書き込むLinuxおよびUnixシステムのコマンドラインユーティリティです。
tr
コマンドは、繰り返される文字の削除、大文字から小文字への変換、基本的な文字の置換および削除などの操作を実行できます。 通常、配管を介して他のコマンドと組み合わせて使用されます。,
このチュートリアルでは、tr
コマンドを使用する方法を、実用的な例と最も一般的なオプションの詳細な説明によって示します。
trコマンドの使い方#
tr
コマンドの構文は次のとおりです。
tr OPTION... SET1
tr
通常は同じ長さの二つの文字セットを受け入れ、最初のセットの文字を第二のセットの対応する文字に置き換えます。,
ASET
基本的には、特別なバックスラッシュエスケープ文字を含む文字列です。
次の例では、tr
は、最初のセットの文字を第二のセットの文字にマッピングすることによって、標準入力(linuxize)のすべての文字を置き換えます。,
echo 'linuxize' | tr 'lin' 'red'
l
の各オカレンスは、r
、i
e
、およびn
r
に置き換えられますid=”7fb68be1dd”>:
reduxeze
文字セットは、文字範囲を使用して定義することもできます。, たとえば、次のように書く代わりに、
echo 'linuxize' | tr 'lmno' 'wxyz'
次を使用できます。
echo 'linuxize' | tr 'l-n' 'w-z'
-c
(--complement
)オプションが使用されている場合、tr
すべての文字を置き換えますそれはset1にはありません。
以下の例では、”li”を除くすべての文字は、第二のセットの最後の文字に置き換えられます。
echo 'linuxize' | tr -c 'li' 'xy'
liyyyiyyy
お気づきかもしれませんが、上記の出力には入力よりも目に見える文字がもう一つあります。, これは、echo
コマンドが不可視の改行文字\n
これもy
に置き換えられるためです。 改行なしで文字列をエコーするには、-n
オプションを使用します。
-d
(--delete
)オプションはtr
SET1で指定された文字を削除するように指示します。 を削除する場合、文字なしで絞り指定のみのオールインワンセットです。●,
以下のコマンドは、l
、i
およびz
文字を削除します。
echo 'Linuxize' | tr -d 'liz'
L
入力に大文字が含まれているため、文字は削除されませんL
一方、l
セット内の文字は小文字です。
Lnuxe
-s
(--squeeze-repeats
)オプションは、繰り返される出現のシーケンスを最後のセットの文字セットで置き換えます。,
次の例では、tr
繰り返される空白文字を削除します。
echo "GNU \ Linux" | tr -s ' '
GNU \ Linux
SET2を使用すると、SET1で指定された文字のシーケンスがSET2に置き換えられます。
echo "GNU \ Linux" | tr -s ' ' '_'
GNU_\_Linux
-t
(--truncate-set1
)オプションは、さらなる処理を行う前にtr
SET1をSET2の長さに切り捨てます。,
デフォルトでは、SET1がSET2より大きい場合tr
はSET2の最後の文字を再利用します。 ここに例があります:
echo 'Linux ize' | tr 'abcde' '12'
出力は、文字e
SET1からの文字がSET2の最新の文字、つまり2
:
Linux iz2
ここで、-t
オプション:
echo 'Linux ize' | tr -t 'abcde' '12'
Linux ize
set1の最後の三つの文字が削除されていることがわかります。, SET1はSET2と同じ長さの’ab’になり、置換は行われません。
オプションの組み合わせ#
tr
コマンドを使用すると、そのオプションを組み合わせることもできます。 たとえば、次のコマンドは、まずi
を除くすべての文字を0
に置き換え、次に繰り返される0
文字を絞り込みます。
echo 'Linux ize' | tr -cs 'i' '0'
0i0i0
Trコマンド例#
このセクションでは、tr
コマンドの一般的な使用例をいくつか紹介します。,
小文字を大文字に変換#
小文字を大文字または逆に変換することは、tr
コマンドの一般的なユースケースの一つです。 はすべての小文字に一致し、
はすべての大文字に一致します。
echo 'Linuxize' | tr '' ''
LINUXIZE
文字クラスの代わりに、範囲を使用することもできます。
echo 'Linuxize' | tr 'a-z' 'A-Z'
大文字を小文字に変換するには、セットの場所を切り替えるだけです。,
すべての数字以外の文字を削除#
次のコマンドは、数字以外の文字をすべて削除します。
echo "my phone is 123-456-7890" | tr -cd
すべての数字文字を表し、
-c
オプションを使用すると、数字以外の文字をすべて削除します。,次のようになります。
1234567890
各単語を新しい行に入れます#
各単語を新しい行に入れるには、英数字以外の文字をすべて一致させ、新しい行に置き換える必要があります。
echo 'GNU is an operating system' | tr -cs '' '\n'
GNUisanoperatingsystem
空白行を削除します#
空白行を削除するには、繰り返し改行文字を絞るだけです。
tr -s '\n' < file.txt > new_file.txt
上記のコマンドでは、リダイレクトシンボル<
file.txt
の内容をtr
コマンドに渡します。, リダイレクト>
は、コマンドの出力をnew_file.txt
に書き込みます。
$PATHディレクトリを別の行に出力します#
$PATH
環境変数は、コマンドを入力するときに実行可能ファイルを検索するディレクトリをシェルに指示するディレクトリのコロン区切りのリストです。,
各ディレクトリを別の行に印刷するには、コロン(:
)に一致させ、新しい行に置き換える必要があります。
echo $PATH | tr ':' '\n'
/usr/local/sbin/usr/local/bin/usr/sbin/usr/bin/sbin/bin
結論#
tr
—–
非常に便利ですが、tr
は単一文字でのみ機能します。 より複雑なパターンマッチングと文字列操作を行うには、sed
またはawk
を使用する必要があります。