スクリプトを書くときは、アルファ([a-zA-Z])を除くすべての文字を改行にしたいと思います。定義に従って-cフラグ(集合の補数)が使用される場合、trはSET1にないすべての文字をSET2で指定された文字に置き換える必要があります。しかし、期待どおりに動作しません。以下を試してください。
echo '[[:lower:]]' | tr -c '[a-zA-Z]' '\n'
私が得た結果は次のとおりです。
[[
lower
]]
ご覧のとおり、これは列を置き換えますが、角かっこは置き換えません。
誰でもこれを明確にできますか?
答え1
tr
この正規表現スタイルの文字クラスは解釈されません。
[a-zA-Z]
〜と[
範囲の文字セットとして解釈されます。a
z
]
[
したがって、その補足は、すべての文字butとから、およびまでの文字範囲を含む文字セットです。a
z
]
そのため[
交換]
できません。
アルファベット以外の文字を置き換えるには、a-zA-Z
置換セットの補数として指定します。
echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'
% echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'
lower
%