trを使用するときに奇妙な動作をする特定のサーバーがあります。以下は、稼働中のサーバーの例です。
-bash-3.2$ echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-z]
1234567890
-bash-3.2$
それは私には完全に理にかなっています。
ただし、これは「特別な」サーバーからのものです。
[root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-z]
abcdefghijklmnpqrstuvwxyz1234567890
ご覧のように、すべての小文字の削除は失敗します。しかし、それは文字「o」を削除しました
興味深いのは、次の2つの例ですが、これらはまったく意味がありません。
[root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-n]
opqrstuvwxyz1234567890
[root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-o]
abcdefghijklmnpqrstuvwxyz1234567890
[root@host~]#
(ここでも、最後の例では「o」が削除されています)
ここで何が起こっているのか誰か誰か知っていますか?私が使用している他のLinuxボックスでは再現できません。
tr
範囲は、を囲まずに記述され[...]
ます。だからtr -d '[a-z]'
殺すでしょうa-z
、そしてまた文字[
と]
。tr -d a-z
文字だけを殺すために使用しa-z
ます。