2016-12-19 5 views
0

Ich sehe diese Zeilen in meiner Studie.Was macht diese sed-Befehlszeile?

$temp = 'echo $line | sed s/[a-z AZ 0-9 _]//g' 
IF($temp != '') 
    echo "Line contains illegal characters" 

Ich verstehe nicht. Ist sed nicht wie eine Ersatzfunktion? Im Code sollte [a-z AZ 0-9 _] durch '' ersetzt werden. Ich verstehe nicht, wie dies bestimmt, wenn $ Zeile ungültige Zeichen hat.

+0

Wenn alle zulässigen Zeichen entfernt werden (was das "sed" tut) und das Ergebnis nicht leer ist, bedeutet dies, dass noch ungültige Zeichen übrig waren. – kaylum

+0

Welche Shell ist das? –

Antwort

3

sed ist ein Stream-Editor-Tool, das reguläre Ausdrücke anwendet, um die Eingabe zu transformieren. Der Befehl

sed s/regex/replace/g 

von stdin liest und jedes Mal, es ist etwas passenden regex findet, ersetzt es mit dem Inhalt replace. In Ihrem Fall den Befehl

sed s/[a-z A-Z 0-9 _]//g 

hat [a-z A-Z 0-9] als regulärer Ausdruck und den leeren String als Ersatz. (Hast du einen Bindestrich zwischen A und Z vergessen?) Dies bedeutet, dass alles, was dem angegebenen regulären Ausdruck entspricht, gelöscht wird. Dieser reguläre Ausdruck bedeutet „jedes Zeichen, das entweder zwischen a und z ist, zwischen A und Z zwischen 0 und 9, einem Raum oder einem Unterstrich“, so dass dieser Befehl im wesentlichen löscht alle alphanumerischen Zeichen, Leerzeichen oder Unterstreicht aus dem Eingang und Deponien Was bleibt übrig? Das Testen, ob die Ausgabe leer ist, fragt dann, ob darin Zeichen vorhanden sind, die nicht alphanumerisch, Leerzeichen oder Zahlen sind, und so funktioniert der Code.

Ich würde empfehlen, sed zu der Liste der Tools hinzuzufügen, mit denen Sie eine grundlegende Vertrautheit erhalten sollten, da es in der Befehlszeile ziemlich häufig zu sehen ist.

+0

Also, wenn es keine leere Zeichenfolge ist, hat es Zeichen, die nicht gelöscht wurde. Und diese wurden nicht gelöscht, sind Zeichen, die keine alphanumerischen Zeichen, Leerzeichen oder Unterstriche sind. ohhhh ich bekomme es jetzt danke :) –