tr
rot13変換を実行したいです。私はこのコマンドをよく理解できます。
tr A-Za-z N-ZA-Mn-za-m <<< "URYC ZR CYRNFR"
どの出力がありますが、HELP ME PLEASE
他のコマンドがどのように同じrot13変換を生成するかはわかりません。
tr .............A-Z A-ZA-Z <<< "URYC ZR CYRNFR"
だから、2つの質問があります。
- 2番目のコマンドの後に隠された魔法は何ですか
tr
? - 最初のコマンドと同様に、2番目のコマンドも小文字と大文字の両方で機能するようにするにはどうすればよいですか?
答え1
仕組みは次のとおりです。
SET1-> .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
SET2-> ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM
したがって、にtr
翻訳されます。SET1
SET2
13
これも13個の点があるので、単位で動くという点で最初のものと同じです。
SET1
小文字を含めるには、同様のオフセットでソートする必要があります。例:
.............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm
Z
a
との間には大文字の半分と小文字の半分にわたって26点があります。したがって、tr
コマンド自体は次のようになります。
tr .............A-Z..........................a-z A-ZA-Za-za-z
答え2
@Prvt_Yadvが答えで述べたように、13のポイントがあるのでうまくいきます。
セットは次のとおりです
First set: .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
ドットは特殊文字ではないので、入力内容にドットがあればそのドットも翻訳されます。私が持っているバージョンでは、tr
2番目のグループの最後の対応する文字です。この場合は次のようになりますM
。
$ echo URYC ZR CYRNFR. | tr .............A-Z A-ZA-Z
HELP ME PLEASEM
(私が想像できる他のバージョンは、tr
セット2で最初に一致する文字を使用して1つを提供できますA
。)
2番目の質問に答えるには、2番目のセットの残りの大文字を「使用」するには、最初のセットの追加の13ポイントが必要です。
First set: .............ABCDEFGHIJKLMNOPQRSTUVWXYZ.............
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
その後、パターンを繰り返すことができます。
First set: .............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
これは私たちに以下を提供します。
tr .............A-Z..........................a-z A-ZA-Za-za-z
だから:
$ echo Uryc zr cyrnfr | tr .............A-Z..........................a-z A-ZA-Za-za-z
Help me please
個人的には、あなたの質問への最初のアプローチはより簡単だと思います!
最初の方法は、入力の他の文字も変換しません。たとえば、次を比較します。
$ echo Uryc zr cyrnfr. | tr .............A-Z..........................a-z A-ZA-Za-za-z
Help me pleasem
そして
$ echo Uryc zr cyrnfr. | tr A-Za-z N-ZA-Mn-za-m
Help me please.
答え3
@Prvt_Yadvのおかげで、これらの点を理解することができます。最初の質問に対する答えは次のとおりです。
2番目のコマンドの後に隠された魔法は何ですか
tr
?
この13点は、単に2番目のセットの最初の13文字にマップされます。だから
tr .............A-Z A-ZA-Z
次のコレクションを作成します。
SET1 -> .............ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
入力にポイントが含まれていない場合、これらの代替項目は使用されないため、初期シーケンスを削除できます。その後、これらのセットは次のようになります。
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
ただし、最初のセットにはすでに26文字すべてが含まれており、2番目のセットには後続の文字が繰り返されているため、これらも破棄され、次のように終了します。
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM
これは最初のコマンドと同じrot13置換です(小文字はここでは処理されません)。質問のタイトルにも同じロジックを適用できます。
tr ...A-Z A-ZA-Z <<< “JVPQBOV”
次のコレクションを作成します。
SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
初期シーケンスに続く繰り返し文字を削除すると、次のようになります。
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC
これはrot3の代替品です。
今、2番目の質問は次のとおりです。
最初のコマンドと同様に、2番目のコマンドも小文字と大文字の両方で機能するようにするにはどうすればよいですか?
動作させるには、次のように最初に必要な数のポイントを配置し、腐敗と親とサブシーケンスの間の26ポイントを一致させます。
tr ........A-Z..........................a-z A-ZA-Za-za-z
これにより、鈍感なrot8が正常に作成されます。これがうまくいく理由を直感的に理解するために、次のコレクションを見てみましょう。
SET1 -> ........ABCDEFGHIJKLMNOPQRSTUVXWYZ..........................abcdefghijklmnopqrstuvxwyz
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyzabcdefghijklmnopqrstuvxwyz
ドットマップと末尾の文字を除く:
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh
今大文字と小文字の両方で動作します:)
動作させるもう1つの方法は、tr
次の2つのコマンドを使用することです。
tr .............A-Z A-ZA-Z <<< "ABJ V hqrefgnaq" | tr .............a-z a-za-z
@iruvarはドット代替の使用について警告しました。入力文字列に点が含まれている場合、このコマンドは期待どおりに機能しません。これは、ポイントが別の文字にマッピングされるのは、置換をすると最後にマッピングされtr
た文字に入力ポイントが変更されるからである。しかし、実際にはドットに加えて他の文字を使用することができます。したがって、tr
コマンドでドットを使用できない場合は、次のように使用できます@
。これはまた働きます:
tr @@@@@@@@@@@@@A-Z A-ZA-Z <<< "GUNAX LBH NYY..."