0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0245(2025/09/15)trコマンドで 文字ずらし

Posted at

trコマンドで 文字ずらし

trとは、標準入力の文字を置換・削除・圧縮するコマンドである。

trコマンドとは/何の略?

trtranslate / transliterate の略で、文字集合(set)を別の集合に変換します。ファイル名は直接受け取らず、標準入力→標準出力で動くのが特徴です。よく cat・パイプ・ヒアストリングと組み合わせます。

主な動作の比較

機能 使い方 典型例 要点
置換 tr set1 set2 tr 'a-z' 'A-Z' set2 が短いと最後の文字が繰り返されて埋められる
削除 tr -d set1 tr -d '[:digit:]' set1 に含まれる文字を取り除く
連続圧縮 tr -s set1 tr -s ' ' set1 に含まれる連続文字を 1 個に圧縮
補集合 tr -c set1 set2 tr -c '[:print:]' '\n' set1 以外を set2 に変換(例は非表示文字を改行に)

具体例:ROT13(13 文字ずらし)

英字を 13 文字回す「Caesar/ROT13」は tr のお家芸です。

# ファイル data.txt を ROT13 変換
cat data.txt | tr a-z n-za-m | tr A-Z N-ZA-M

a-z → n-za-m は “n で始めて z の後に a-m を続ける” という意味。大文字は別途同じ変換を掛けます。ヒアストリングなら:

tr a-z n-za-m <<< "hello world" | tr A-Z N-ZA-M

応用:13 以外のずらしも可能。例:ROT5 は tr 'a-z' 'f-za-e' | tr 'A-Z' 'F-ZA-E'

実用スニペット

# 小文字化
tr 'A-Z' 'a-z'

# 大文字化
tr 'a-z' 'A-Z'

# 数字を削除
tr -d '[:digit:]'

# 連続スペースを 1 個に
tr -s ' '

# 改行 → スペース(最後に改行が消える点に注意)
tr '\n' ' '

集合(set)の書き方チートシート

表記 意味 補足
'a-z' 範囲 a..z をすべて含む ロケールに依存しない範囲
'[:lower:]' 文字クラス(小文字) 英小文字全般 ロケール依存(LC_ALL=Cで固定化)
'[:upper:]' 文字クラス(大文字) 英大文字全般 同上
'[:digit:]' 文字クラス(数字) 0-9 同上
'[:space:]' 空白類 スペース/タブ/改行など 同上
-c 補集合 tr -c '[:print:]' set1 以外を対象に
-s 連続圧縮 tr -s '[:space:]' 連なりを 1 個に
-d 削除 tr -d '0-9' 置換ではなく除去

よくある落とし穴

  • UTF-8 の多バイト文字は壊れるtr は基本バイト単位。日本語のカナ・漢字の変換は対象外。英数記号に限定するか、iconv/nkf/awk/python 等を使う。
  • クォート必須a-z はシェル展開を避けるため 必ずクォート'a-z')。
  • ロケール影響[:upper:] などのクラスはロケール依存。再現性重視なら LC_ALL=C tr ...
  • BSD と GNU の細差:細かな挙動差があるため、移植性が要るスクリプトは POSIX に沿った最小機能(置換/削除/圧縮/補集合)に絞るのが安全。

まとめ

tr は「単純だが速い」文字処理ツール。英字の文字ずらし(ROT 系)、大文字小文字変換ノイズ削除空白圧縮のワンライナーを武器に、前処理を軽くして後段(awk/sed/grep)を楽にしましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?