Was machen die Punkte in diesem tr-Befehl: tr… AZ A-ZA-Z <<< “JVPQBOV” (mit 13 Punkten)

18

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:

  1. Was ist die Magie hinter dem zweiten trBefehl?
  2. Wie funktioniert der zweite Befehl sowohl für Klein- als auch für Großbuchstaben, genau wie der erste Befehl?
Frederico Oliveira
quelle
Ich weiß, dass es 13 Punkte gibt. Ich möchte wissen, wie es funktioniert. Es gibt keine Erklärung für Punkte im Handbuch
Frederico Oliveira
4
du solltest besser hoffen, dass du nicht auf einen Punkt in deinem Eingabetext
stößt
1
FWIW die kürzere Form tr [.*13].A-Z A-ZA-Zfunktioniert genauso gut wietr .............A-Z A-ZA-Z
iruvar

Antworten:

17

Es funktioniert wie folgt:

SET1-> .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
SET2-> ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM

Also trwerde übersetzen SET1nach SET2.

Dies ist äquivalent zu dem ersten, da es sich ebenfalls um 13Einheiten verschiebt, da es 13 Punkte gibt.

Um die Kleinbuchstaben einzuschließen, müssen Sie sie SET1mit einem ähnlichen Versatz anordnen , dh:

.............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz

ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklm

Das sind 26 Punkte zwischen Zund a, die sich über die Hälfte des Groß- und Kleinbuchstabens erstrecken. Der trBefehl selbst lautet also:

tr .............A-Z..........................a-z A-ZA-Za-za-z
Prvt_Yadav
quelle
14

Wie @Prvt_Yadv in ihrer Antwort sagt, funktioniert es, weil es 13 Punkte gibt.

Die Sets sind

First set:  .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

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 ein M:

$ echo URYC ZR CYRNFR. | tr .............A-Z A-ZA-Z
HELP ME PLEASEM

(Ich könnte mir vorstellen, dass eine andere Version von trmöglicherweise das erste übereinstimmende Zeichen in Satz 2 verwendet, das eine A. 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":

First set:  .............ABCDEFGHIJKLMNOPQRSTUVWXYZ.............
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

dann kannst du das muster wiederholen:

First set:  .............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

was uns gibt:

tr .............A-Z..........................a-z A-ZA-Za-za-z

Und so:

$ echo Uryc zr cyrnfr | tr .............A-Z..........................a-z A-ZA-Za-za-z
Help me please

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:

$ echo Uryc zr cyrnfr. | tr .............A-Z..........................a-z A-ZA-Za-za-z  
Help me pleasem

mit

$ echo Uryc zr cyrnfr. | tr A-Za-z N-ZA-Mn-za-m
Help me please.
user7761803
quelle
1

Ok, dank @Prvt_Yadv konnte ich die Punkte verstehen. Hier ist die Antwort auf die erste Frage:

Was ist die Magie hinter dem zweiten trBefehl?

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:

SET1 -> .............ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ

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:

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ

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

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM

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:

SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ

Verwerfen der Anfangssequenz und der nachfolgenden sich wiederholenden Buchstaben zu:

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC

Welches ist die rot3 Substitution.

Nun zur zweiten Frage:

Wie funktioniert der zweite Befehl sowohl für Klein- als auch für Großbuchstaben, genau wie der erste Befehl?

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:

tr ........A-Z..........................a-z A-ZA-Za-za-z

Dies würde erfolgreich ein unempfindliches rot8 erzeugen. Um zu veranschaulichen, warum dies funktioniert, sehen wir uns die Sets an:

SET1 -> ........ABCDEFGHIJKLMNOPQRSTUVXWYZ..........................abcdefghijklmnopqrstuvxwyz
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyzabcdefghijklmnopqrstuvxwyz

Ohne die Punktzuordnung und die nachfolgenden Buchstaben:

SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh

Jetzt funktioniert es sowohl für Groß- als auch Kleinbuchstaben :)

Eine andere Möglichkeit, dies zu erreichen, besteht darin, zwei trBefehle wie folgt zu verwenden:

tr .............A-Z A-ZA-Z <<< "ABJ V hqrefgnaq" | tr .............a-z a-za-z

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 trden Eingabepunkt in den zuletzt zugeordneten Buchstaben ändern. Sie können jedoch auch jedes andere Zeichen als Punkte verwenden. Wenn die Verwendung von Punkten in Ihrem trBefehl ein Problem darstellt, können Sie @beispielsweise stattdessen verwenden. Das würde genauso gut funktionieren:

tr @@@@@@@@@@@@@A-Z A-ZA-Z <<< "GUNAX LBH NYY..."
Frederico Oliveira
quelle
3
Ich bin mir nicht sicher, wie Sie zu dem Schluss gekommen sind, dass "Punkte durch eine Folge von Buchstaben ersetzt werden, die von a bis zur Anzahl der Punkte beginnen". Das ist überhaupt nicht der Fall. Es ist keine Magie beteiligt; wie Prvt_Yadv erklärte, gibt es zwei Sätze und trist Abbildung von Satz 1 bis 2 gesetzt, wie immer, aber in diesem Fall haben Sie die Zeichen abgebildet .zu A, und auch B, und auch ... und auch M. Dies spielt keine Rolle, da Ihre Eingabe kein a enthält. .Wenn dies jedoch der Fall ist, wird daraus ein M( trverwendet die letzte Ausgabe, die Sie für eine bestimmte Eingabe angegeben haben)
Michael Mrozek
Danke für die Klarstellung. Ich habe die Antwort aktualisiert, um meine Fehler zu beheben :)
Frederico Oliveira
1
Ich bewundere Ihre (anfänglichen) Versuche, das Verhalten dieses Programms mithilfe der Wissenschaft zu bestimmen, aber in Zukunft sollten Sie so viele verschiedene Hypothesen wie möglich aufstellen und Tests entwerfen, um alle zu unterscheiden, bevor Sie versuchen, sie zu verwenden. Andernfalls werden Sie verwirrt und passen Ihr Modell so wenig wie möglich an, um die nachfolgenden Ergebnisse zu erklären, bis Ihr Modell nur noch eine Masse von Sonderfällen enthält.
wizzwizz4