Ich möchte verwenden tr
, um eine Rot13-Transformation durchzuführen. Ich kann diesen Befehl wunderbar verstehen:
tr A-Za-z N-ZA-Mn-za-m <<< "URYC ZR CYRNFR"
welche Ausgabe ist HELP ME PLEASE
, aber ich kann nicht herausfinden, wie dieser andere Befehl die gleiche rot13-Transformation erzeugen kann:
tr .............A-Z A-ZA-Z <<< "URYC ZR CYRNFR"
Ich habe also zwei Fragen:
- Was ist die Magie hinter dem zweiten
tr
Befehl? - Wie funktioniert der zweite Befehl sowohl für Klein- als auch für Großbuchstaben, genau wie der erste Befehl?
tr [.*13].A-Z A-ZA-Z
funktioniert genauso gut wietr .............A-Z A-ZA-Z
Antworten:
Es funktioniert wie folgt:
Also
tr
werde übersetzenSET1
nachSET2
.Dies ist äquivalent zu dem ersten, da es sich ebenfalls um
13
Einheiten verschiebt, da es 13 Punkte gibt.Um die Kleinbuchstaben einzuschließen, müssen Sie sie
SET1
mit einem ähnlichen Versatz anordnen , dh:Das sind 26 Punkte zwischen
Z
unda
, die sich über die Hälfte des Groß- und Kleinbuchstabens erstrecken. Dertr
Befehl selbst lautet also:quelle
Wie @Prvt_Yadv in ihrer Antwort sagt, funktioniert es, weil es 13 Punkte gibt.
Die Sets sind
Der Punkt ist kein Sonderzeichen. Wenn Sie also einen Punkt in Ihrer Eingabe haben, wird dieser ebenfalls übersetzt. In der Version
tr
, die ich habe, ist es das letzte entsprechende Zeichen im zweiten Satz, in diesem Fall einM
:(Ich könnte mir vorstellen, dass eine andere Version von
tr
möglicherweise das erste übereinstimmende Zeichen in Satz 2 verwendet, das eineA
. Ergibt .)Um Ihre zweite Frage zu beantworten , benötigen Sie weitere 13 Punkte im ersten Satz, um die verbleibenden Großbuchstaben in Satz 2 zu "verbrauchen":
dann kannst du das muster wiederholen:
was uns gibt:
Und so:
Persönlich denke ich, dass der erste Weg, dies in Ihrer Frage zu tun, einfacher ist!
Der erste Weg transformiert auch keine anderen Zeichen in der Eingabe. Vergleichen Sie zum Beispiel:
mit
quelle
Ok, dank @Prvt_Yadv konnte ich die Punkte verstehen. Hier ist die Antwort auf die erste Frage:
Die 13 Punkte werden einfach den ersten 13 Buchstaben des zweiten Satzes zugeordnet. So
tr .............A-Z A-ZA-Z
wird die folgenden Sets produzieren:Wenn Ihre Eingabe keinen Punkt enthält, können Sie die ursprüngliche Sequenz verwerfen, da Sie diese Ersetzung nicht verwenden. Dann würden die Sets werden:
Aber da der erste Satz bereits alle 26 Buchstaben enthält und Satz 2 sich wiederholende abschließende Buchstaben enthält, werden diese ebenfalls verworfen und schließlich verworfen
Welches ist die rot13-Ersetzung und identisch mit dem ersten Befehl (außer, dass hier keine Kleinbuchstaben behandelt werden). Dieselbe Logik kann für den Titel der Frage angewendet werden:
tr ...A-Z A-ZA-Z <<< “JVPQBOV”
würde die Sets produzieren:Verwerfen der Anfangssequenz und der nachfolgenden sich wiederholenden Buchstaben zu:
Welches ist die rot3 Substitution.
Nun zur zweiten Frage:
Damit es funktioniert, setzen Sie die gewünschte Anzahl von Punkten an den Anfang, wobei Sie Ihre Fäulnis und 26 Punkte wie folgt auf die obere und die untere Reihenfolge abstimmen:
Dies würde erfolgreich ein unempfindliches rot8 erzeugen. Um zu veranschaulichen, warum dies funktioniert, sehen wir uns die Sets an:
Ohne die Punktzuordnung und die nachfolgenden Buchstaben:
Jetzt funktioniert es sowohl für Groß- als auch Kleinbuchstaben :)
Eine andere Möglichkeit, dies zu erreichen, besteht darin, zwei
tr
Befehle wie folgt zu verwenden:Eine Einschränkung bei der Verwendung der Punktersetzung wurde von @iruvar gegeben: Dieser Befehl funktioniert nicht wie erwartet, wenn die Eingabezeichenfolge Punkte enthält. Dies liegt daran, dass die Punkte anderen Buchstaben zugeordnet werden und beim Ersetzen
tr
den Eingabepunkt in den zuletzt zugeordneten Buchstaben ändern. Sie können jedoch auch jedes andere Zeichen als Punkte verwenden. Wenn die Verwendung von Punkten in Ihremtr
Befehl ein Problem darstellt, können Sie@
beispielsweise stattdessen verwenden. Das würde genauso gut funktionieren:quelle
tr
ist Abbildung von Satz 1 bis 2 gesetzt, wie immer, aber in diesem Fall haben Sie die Zeichen abgebildet.
zuA
, und auchB
, und auch ... und auchM
. Dies spielt keine Rolle, da Ihre Eingabe kein a enthält..
Wenn dies jedoch der Fall ist, wird daraus einM
(tr
verwendet die letzte Ausgabe, die Sie für eine bestimmte Eingabe angegeben haben)