Entfernen Sie ungültige Domänennamen mit Sed

Entfernen Sie ungültige Domänennamen mit Sed

Ich habe Probleme, einen sed-Befehl zu schreiben. Führen Sie Folgendes aus. Ich habe eine Datei, die nur „gültige“ Domänennamen enthalten sollte. Wie verwende ich sed, um alle Zeilen zu entfernen, die nicht mit einem Ausdruck übereinstimmen?

Das Folgende scheint mit den Zeilen übereinzustimmen, die ich im verwendeten Online-Tool beibehalten möchte, ich bin jedoch sicher, dass es besser geschrieben werden könnte.

^*.*[a-zA-Z0-9][a-zA-Z0-9-]+\.[a-zA-Z]{2,15}?$

Die Datei

example.example.example.org
01.001.11.00.example.com
asdf-asdf-asdf-www.example.net
example
example.example.co.uk
(example)
example.photography
example.info
example/
example.
example</h1>
{example}
etc.

Erwartete Ausgabe:

example.example.example.org
01.001.11.00.example.com
asdf-asdf-asdf-www.example.net
example.example.co.uk
example.photography
example.info

Danke für die Hilfe.

Antwort1

Ich musste Ihren regulären Ausdruck ändern, um ihn gültig zu machen, aber dieser Sed-Befehl druckt nur die übereinstimmenden Zeilen:

$ sed -nr '/[.].*[a-zA-Z0-9][a-zA-Z0-9-]+([.][a-zA-Z]{2,15})?$/p' file
example.example.example.org
01.001.11.00.example.com
asdf-asdf-asdf-www.example.net
example.example.co.uk
example.photography
example.info

Wie es funktioniert

  • -n

    Dies weist sed an, keine Zeile auszudrucken, es sei denn, wir fordern es ausdrücklich dazu auf.

  • -r

    Dies weist sed an, erweiterte reguläre Ausdrücke zu verwenden.

  • /[.].*[a-zA-Z0-9][a-zA-Z0-9-]+([.][a-zA-Z]{2,15})?$/p

    /.../wählt Zeilen aus, die mit dem regulären Ausdruck übereinstimmen, und /.../pweist sed an, die Zeilen auszudrucken, die mit dem regulären Ausdruck übereinstimmen.

Änderungen am regulären Ausdruck

Beachten Sie, dass dies ^*kein gültiger Weg ist, einen regulären Ausdruck zu beginnen. ^entspricht dem Anfang einer Zeile und *würde mit null oder mehr der vorhergehenden Zeichen übereinstimmen, aber es ist kein vorhergehendes Zeichen angegeben. Dies könnte durch Hinzufügen eines Punkts wie in gültig gemacht werden ^.*. Das entspricht einer Zeile, die mit irgendetwas beginnt. Aber da das hier nicht hilfreich ist, habe ich es entfernt.

Da es außerdem so aussieht, als wollten Sie Zeilen ausschließen, die mit einem Punkt enden, habe ich es \.[a-zA-Z]{2,15}?$in geändert ([.][a-zA-Z]{2,15})?$.

Für Versuche anderer Leute, einen regulären Ausdruck zu erstellen, der Domänennamen entspricht, siehe zum Beispiel:Domänennamenvalidierung mit RegExoderRegex stimmt mit dem Hauptdomänennamen überein.

verwandte Informationen