連続した同じ文字を 1 文字にする tr コマンド

tr コマンドには 連続した同じ文字を 1 文字にする -s というオプションがあります。

例えば次のようにスペースが続いている場合

abcde      fghij

tr コマンドを使えば簡単にスペースを 1 つにすることができます。

abcde fghij

次のように指定します。

$ echo "abcde      fghij" | tr -s [:space:]

abcde fghij

[:space:]は、スペースやタブなどを示す文字クラスです。

ls の出力も簡単に加工できます。 (意味はないですが)

$ ls -ltr | head | tr -s [:space:]

total 9498
drwx------ 2 root root 48 1970-01-01 09:00 gconfd-root
drwx---rwx 2 root hpusers 48 2006-09-09 16:03 mmcache
drwxr-xr-x 2 apache apache 48 2006-09-09 16:11 fcgi
drwx------ 2 root root 120 2006-09-27 12:15 YaST2-06402-9kTlAk
drwxr-xr-x 4 root root 96 2007-06-03 17:21 pear
drwx------ 3 root root 80 2007-07-06 19:09 spamd-4708-init
drwx------ 3 root root 80 2007-07-06 22:28 spamd-4426-init
drwx------ 2 root root 120 2009-01-15 09:46 YaST2-04662-jtfPyg
srwxrwxrwx 1 mysql mysql 0 2010-03-04 08:29 mysql.sock

連続する「同じ文字」を 1 つにするだけなので [:alpha:] を 指定すると次のようになります。

$ echo "aaabbccddaaa" | tr -s [:alpha:]

abcda

思いがけないときに役に立つことがあります。

Google サイト内検索

Amazonアソシエイト