tr -t
コマンドを使用するときは、string1
長さだけ切り捨てる必要がありますかstring2
?
tr -t abcdefghijklmn 123 # abc... = string1, 123 = string2
the cellar is the safest place # actual input
the 3ell1r is the s1fest pl13e # actual output
「Truncation」は「短縮」の別の言葉です。そうですか?tr
このオプションを完全に無視してパターンに従って翻訳します-t
。 [正しいオプションを使用していることを確認する] オートコンプリートすると、--truncate-set1
同じ出力が生成されます。
質問:私がここで何を間違っているのでしょうか?
私はDebianベースのディストリビューションでBASHを使って作業しています。
修正する
これは以下の私の意見のコピーです。
私が考えた意味はtr -t
次のとおりです。string1をstring2の長さに短縮します。。私はそれa
がに翻訳されるのを見ます1
、それはb
に翻訳されます2
、それはc
に翻訳されます3
。短縮とは関係ありません。 「Truncate」は私が思ったのとは違う意味のようです。 [私はネイティブスピーカーではありません。]
答え1
tr -tコマンドを使用するときは、string1をstring2の長さに切り捨てる必要がありますか?
このようなことが起こったのではないでしょうか?
abcdefghijklmn
123
どの文字が変わり、どの文字が変わらないかを確認してください。
the 3ell1r is the s1fest pl13e
「a」と「c」。ただし、元の(切り捨てられていない)セット1では、e、f、i、またはlではありません。
そうでない場合は、-t
次のようになります。
t33 33331r 3s t33 s133st p3133
その理由は(でman tr
)、「SET2はSET1の長さだけ拡張されます。最後の文字を繰り返して必要。 」 したがって、切り捨てられたセット1がない場合は、-t
次のようになります。
tr abcdefhijklmn 1233333333333
別の例を考えてみましょう。ただし、同じ「地下室が最も安全な場所です」を入力として使用します。
> input="the cellar is the safest place"
> echo $input | tr is X
the cellar XX the XafeXt place
これは、第2のグループが第1のグループの全てのコンテンツを含むように自動的に拡張されるからである。 -t
本質的に逆にしなさい;2番目のグループを展開する代わりに、最初のグループを切り捨てます。
> echo $input | tr -t is X
the cellar Xs the safest place
これは次のとおりです。
> echo $input | tr i X
the cellar Xs the safest place
's'は最初のグループで切り捨てられたからです。 2つのセットの長さが同じであれば、以下を-t
使用しても違いはありません。
> echo $input | tr is XY
the cellar XY the YafeYt place
> echo $input | tr -t is XY
the cellar XY the YafeYt place