Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
tr / col / expand
『tr』は文字の変換・削除・圧縮を1文字単位で行うコマンドです。『expand』はタブをスペースに、『unexpand』はスペースをタブに変換します。改行コードの変換や大文字小文字の変換など、文字レベルの整形によく使います。
構文
tr [オプション] 文字集合1 [文字集合2] expand [オプション] [ファイル...] unexpand [オプション] [ファイル...]
オプション一覧
| コマンド / オプション | 概要 |
|---|---|
| tr 'abc' 'ABC' | 文字集合1の各文字を文字集合2の対応する文字に変換します。 |
| tr '[:lower:]' '[:upper:]' | 小文字をすべて大文字に変換します。 |
| tr '[:upper:]' '[:lower:]' | 大文字をすべて小文字に変換します。 |
| tr -d '文字集合' | 指定した文字を削除します。 |
| tr -s '文字集合' | 連続する同じ文字を1文字に圧縮します。 |
| tr -c '文字集合1' '文字集合2' | 文字集合1の補集合(含まれない文字)を文字集合2に変換します。 |
| tr '\r' '\n' | Windows の改行コード(\r\n)の \r を削除するために使います。 |
| expand ファイル | タブをスペース8個に変換します。 |
| expand -t N ファイル | タブをスペースN個に変換します。 |
| unexpand ファイル | 先頭のスペースをタブに変換します。 |
サンプルコード
以下の例で各コマンドの動作を説明します。
# 処理対象のテキスト例: # "hello world" → 大文字変換 # "my file name.txt" → スペース置換 # "abc123def456" → 文字削除 # "too many spaces" → 連続文字の圧縮
小文字をすべて大文字に変換します。
echo "hello world" | tr '[:lower:]' '[:upper:]'
HELLO WORLD
スペースをアンダースコアに変換します(ファイル名の正規化などに使います)。
echo "my file name.txt" | tr ' ' '_'
my_file_name.txt
『-d』で指定した文字を削除します。アルファベットを削除して数字だけ取り出す例です。
echo "abc123def456" | tr -d '[:alpha:]'
123456
『-s』で連続する同じ文字を1文字に圧縮します。
echo "too many spaces" | tr -s ' '
too many spaces
『-s』と『cut』を組み合わせて、不揃いな空白のデータからフィールドを取り出します。
echo " alice 30 Tokyo " | tr -s ' ' | cut -d' ' -f2-
alice 30 Tokyo
『-c』(補集合)でアルファベット・数字以外の文字をすべてスペースに変換します。
echo "hello, world! 123" | tr -c '[:alnum:]\n' ' '
hello world 123
Windows の改行コード(\r\n)から \r を削除して Unix 形式に変換します。
tr -d '\r' < windows_file.txt > unix_file.txt
『expand -t N』でタブをスペースN個に変換します。
printf "name\tage\ncity\tcode\n" | expand -t 8
name age city code
概要
『tr』はファイルを引数に取れず、標準入力のみ受け付けます。ファイルを処理するには『tr < ファイル』のようにリダイレクトで入力します。
Windows のテキストファイルを Linux で使う場合に改行コード(\r\n → \n)の変換でよく使われます。より高機能なテキスト変換には『sed』も参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。