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
「切り詰める」は「短くする」の別の言葉ですよね?tr
パターンに従って翻訳すると、-t
オプションは完全に無視されます。[正しいオプションを使用していることを確認するために] と自動補完すると、--truncate-set1
同じ出力が生成されます。
質問: ここで何が間違っているのでしょうか?
私は Debian ベースのディストリビューションで BASH を使って作業しています。
アップデート
これは私が以下に書いたコメントのコピーです。
私が考えたのはtr -t
、次の意味です。文字列1を文字列2の長さに短縮するa
は と翻訳され1
、 はb
と翻訳され2
、 は とc
翻訳されることがわかります3
。これは短縮とは関係ありません。「切り捨てる」は私が考えていたものとは違う意味のようです。[私はネイティブスピーカーではありません]
答え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の長さまで拡張されます最後の文字を繰り返すことによって必要に応じて。" したがって、-t
セット1を切り捨てなければ、次の式と同じになります。
tr abcdefhijklmn 1233333333333
同じ「地下室が最も安全な場所」を入力として使用した別の例を考えてみましょう。
> input="the cellar is the safest place"
> echo $input | tr is X
the cellar XX the XafeXt place
-t
これは、基本的に2 番目のセットが最初のセット全体をカバーするように自動的に拡張されるためです。 その逆のことをする; 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