tr -tコマンドを使用してください。 【理解力質問】

tr -tコマンドを使用してください。 【理解力質問】

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

おすすめ記事