tr
は、LinuxおよびUnixシステムのコマンドラインユーティリティであり、標準入力から文字を変換、削除、および圧縮し、結果を標準出力に書き込みます。
tr
コマンドは、繰り返される文字の削除、大文字から小文字への変換、基本的な文字の置換と削除などの操作を実行できます。通常、配管を介して他のコマンドと組み合わせて使用されます。
このチュートリアルでは、 tr
の使用方法を説明します。 最も一般的なオプションの実用的な例と詳細な説明を通してコマンドします。
tr
の使用方法 コマンド#
tr
の構文 コマンドは次のとおりです:
tr OPTION... SET1 [SET2]
tr
通常は同じ長さの2セットの文字を受け入れ、最初のセットの文字を2番目のセットの対応する文字に置き換えます。
SET
基本的には、特殊な円記号でエスケープされた文字を含む文字列です。
次の例では、 tr
最初のセットの文字を2番目のセットの一致する文字にマッピングすることにより、標準入力(linuxize)のすべての文字を置き換えます。
echo 'linuxize' | tr 'lin' 'red'
l
が出現するたびに r
に置き換えられます 、 i
e
を使用 、および n
d
を使用 :
reduxeze
文字セットは、文字範囲を使用して定義することもできます。たとえば、次のように書く代わりに:
echo 'linuxize' | tr 'lmno' 'wxyz'
使用できるもの:
echo 'linuxize' | tr 'l-n' 'w-z'
-c
の場合 (-補完
)オプションが使用されます、 tr
SET1にないすべての文字を置き換えます。
以下の例では、「li」を除くすべての文字が2番目のセットの最後の文字に置き換えられます。
echo 'linuxize' | tr -c 'li' 'xy'
liyyyiyyy
お気づきかもしれませんが、上記の出力には、入力よりも1つ多くの文字が表示されています。これは、 echo
が原因です コマンドは、非表示の改行文字 \ n
を出力します これもy
に置き換えられます 。改行なしで文字列をエコーするには、 -n
を使用します オプション。
-d
(-delete
)オプションは tr
に指示します SET1で指定された文字を削除します。絞らずに文字を削除する場合は、1セットだけ指定してください。
以下のコマンドはl
を削除します 、 i
およびz
文字:
echo 'Linuxize' | tr -d 'liz'
L
入力に大文字のL
が含まれているため、文字は削除されません l
SETの文字は小文字です。
Lnuxe
-s
(-squeeze-repeats
)オプションは、繰り返される一連の出現を最後のSETの文字セットに置き換えます。
次の例では、 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の最後の3文字が削除されていることがわかります。 SET1はSET2と同じ長さの「ab」になり、置き換えは行われません。
オプションの組み合わせ#
tr
コマンドを使用すると、そのオプションを組み合わせることもできます。たとえば、次のコマンドは最初に i
を除くすべての文字を置き換えます 0
を使用 次に、繰り返される 0
を絞ります 文字:
echo 'Linux ize' | tr -cs 'i' '0'
0i0i0
Trコマンドの例#
このセクションでは、 tr
の一般的な使用例をいくつか取り上げます。 コマンド。
小文字を大文字に変換#
小文字から大文字への変換、またはその逆の変換は、 tr
の一般的な使用例の1つです。 指図。 [:lower:]
すべての小文字と[:upper:]
に一致します すべての大文字に一致します。
echo 'Linuxize' | tr '[:lower:]' '[:upper:]'
LINUXIZE
文字クラスの代わりに、範囲を使用することもできます:
echo 'Linuxize' | tr 'a-z' 'A-Z'
大文字を小文字に変換するには、セットの場所を切り替えるだけです。
すべての非数字文字を削除します#
次のコマンドは、数字以外のすべての文字を削除します。
echo "my phone is 123-456-7890" | tr -cd [:digit:]
[:digit:]
すべての数字を表し、 -c
を使用します オプションの場合、コマンドは数字以外のすべての文字を削除します。出力は次のようになります:
1234567890
各単語を新しい行に入れます#
各単語を新しい行に入れるには、英数字以外のすべての文字を照合して、新しい行に置き換える必要があります。
echo 'GNU is an operating system' | tr -cs '[:alnum:]' '\n'
GNU
is
an
operating
system
空白行を削除します#
空白行を削除するには、繰り返し改行文字を絞るだけです。
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
。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。