tr -c '[a-zA-Z]' '\n' はすべての補足文字を置き換えません。

tr -c '[a-zA-Z]' '\n' はすべての補足文字を置き換えません。

スクリプトを書くときは、アルファ([a-zA-Z])を除くすべての文字を改行にしたいと思います。定義に従って-cフラグ(集合の補数)が使用される場合、trはSET1にないすべての文字をSET2で指定された文字に置き換える必要があります。しかし、期待どおりに動作しません。以下を試してください。

echo '[[:lower:]]' | tr -c '[a-zA-Z]' '\n'

私が得た結果は次のとおりです。

[[
lower
]]

ご覧のとおり、これは列を置き換えますが、角かっこは置き換えません。

誰でもこれを明確にできますか?

答え1

trこの正規表現スタイルの文字クラスは解釈されません。

[a-zA-Z]〜と[範囲の文字セットとして解釈されます。az]

[したがって、その補足は、すべての文字butとから、およびまでの文字範囲を含む文字セットです。az]

そのため[交換]できません。

アルファベット以外の文字を置き換えるには、a-zA-Z置換セットの補数として指定します。

echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'
% echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'



lower



%

関連情報