Ich habe eine verschleierte E-Mail-Adresse gefunden, die mit diesem Befehl entschlüsselt werden kann:
echo "[email protected]" | tr '[a-z]' '[n-za-m]'
Wie gibt das eine gültige E-Mail-Adresse aus? Was macht dieser Befehl?
Ich habe eine verschleierte E-Mail-Adresse gefunden, die mit diesem Befehl entschlüsselt werden kann:
echo "[email protected]" | tr '[a-z]' '[n-za-m]'
Wie gibt das eine gültige E-Mail-Adresse aus? Was macht dieser Befehl?
tr '[a-z]' '[n-za-m]'
in:LC_ALL='C' tr '[a-z]' '[n-za-m]'
Antworten:
tr
Die Manpage erklärt es ziemlich gut. Es ist ein Filter, der Zeichen von einem Satz in einen anderen konvertiert. Der erste angegebene Satz[a-z]
ist eine Kurzform der Eingabe[abcdefghijklmnopqrstuvwxyz]
. Das zweite ist[n-za-m]
, was sich in verwandelt[nopqrstuvwxyzabcdefghijklm]
.tr
jedes Zeichen von stdin liest, und wenn es im ersten Satz erscheint, ersetzt es mit dem Charakter in der gleichen Position in dem zweiten Satz (dies bedeutet[
und]
mit sich selbst immer ersetzt, so einschließlich ihnen war sinnlos, aber eine Menge Leute , Tun Sie es versehentlich, weil reguläre Ausdrücke sie verwenden, um Zeichenklassen darzustellen, damit sie denken,tr
dass sie dies erfordern.Also ein einfacheres Beispiel:
a
verwandelte sich inx
,b
verwandelte sich iny
undc
wurde unverändert gelassen, weil es nicht im ersten Satz war. In diesem Fall muss der Benutzer lediglich seine E-Mail-Adresse über denselben Filter ausführen (da dieser symmetrisch ist -a
Zuordnungen zun
undn
zurücka
usw.), um die gedrehte Version zu erhalten. Wenn Sie es erneut durchlaufen, werden alle Zeichen auf ihre Originale zurückgesetztNebenbemerkung: Dieser spezielle Tausch, bei dem jeder Buchstabe durch die 13 Zeichen im Alphabet ersetzt wird, heißt ROT13 (13 drehen). Es war in Newsgroups beliebt, um Dinge zu verbergen, die die Leute vielleicht nicht sehen wollen
quelle
[
und]
ist nützlich: Sie sind manchmal obligatorisch (einige Solaris-Standardgeräte benötigen sie beispielsweise). Daher ist es wahrscheinlich eine gute Angewohnheit (sobald man weiß, dass man diese nicht mit einem regulären Ausdruck "[...]" mischt)tr
transliteriert Zeichen: Für einige Zeichen x in der Eingabe wird ein Zeichen y ausgegeben.tr
Es werden zwei Befehlszeilenargumente verwendet, die Zeichen "von" und "bis".In Ihrem obigen Beispiel werden die "von Zeichen" als angegeben
'[a-z]'
. Die "zu Zeichen" werden als angegeben'[n-za-m]'
. Die einfachen Anführungszeichen verhindern, dass die Shell, die die Befehlszeile interpretiert, die beiden Argumente ändert.tr
behandelt Argumente in eckigen Klammern als Bereiche. So'[a-z]' means "all lower case characters from 'a' to 'z', inclusive". The second argument is a bit more complicated,
'[n-za-m]' `bedeutet„Kleinbuchstaben von 'n' bis 'z' einschließlich und Kleinbuchstaben von 'a' bis 'm', inklusive‘.tr
transliteriert alle eingegebenen 'a' Zeichen in 'n', 'b' in 'm', 'c' in 'o' usw. bis zu 'n' Zeichen, die als 'z' ausgegeben werden. 'o' Zeichen in der Eingabe werden als 'a', 'p' bis 'b', 'q' bis 'c' usw. ausgegeben. 'z' Zeichen in der Eingabe werden als 'l' ausgegeben.Im Wesentlichen führt Ihr Befehl bei seiner Eingabe eine Caesar-Chiffre durch , jeweils ein Kleinbuchstabe. Jemand musste "[email protected]" verschlüsseln, um die von Ihnen
echo
ausgegebene Zeichenfolge zu erhalten.quelle
So '[a-z]' means "all lower case characters from 'a' to 'z', inclusive"
nein, es bedeutet: '[' und alle Buchstaben 'a' bis 'z' (in Ihrem Gebietsschema!) und ']'. Zum Glück ersetzt das 2. Argument "[" durch "[" und "]" durch "]". Die andere Einschränkung: In einigen Gebietsschemas kann az sein: alle ASCII-Kleinbuchstaben oder alle Buchstaben (Klein- und Großbuchstaben) außer "A" (oder außer "Z" in anderen Gebietsschemas) oder manchmal sogar "alle Buchstaben a bis z" einschließlich Buchstaben mit Akzent ". Um das Übliche zu gewährleisten: Erzwingen Sie das Gebietsschema, während Sie tr:LC_ALL='C' tr 'a-z' 'A-Z'
(oderLC_ALL='C' tr '[a-z]' '[A-Z]'
) aufrufen