sed
Entfernen Sie alles bis einschließlich des ersten Punkts, wenn es mehr als einen Punkt in dieser Zeile gibt, und tun Sie dies für die gesamte Datei.
Vor sed:
akamai.com
cdnjs.cloudflare.com
com.cdn.cloudflare.net
Nach sed:
akamai.com
cloudflare.com
cdn.cloudflare.net
Akzeptierte Antwort:
$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Der sed
Das Skript vergleicht zunächst Zeilen, die mindestens zwei Punkte enthalten, mit dem regulären Ausdruck \..*\.
(hätte auch [.].*[.]
geschrieben werden können ). Für Zeilen, die dazu passen, wird eine Ersetzung durchgeführt, die alles bis einschließlich des ersten Punktes entfernt.
Mit awk
, etwas langatmig im Vergleich zu oben:
$ awk -F '.' -vOFS='.' 'NF > 2 { n=split($0, a); $0=""; for (i=2;i<=n;++i) $(NF+1)=a[i] } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Wenn hier mehr als zwei durch Punkte getrennte Felder vorhanden sind, teilen wir die aktuelle Zeile in Punkte auf und erstellen dann den aktuellen Datensatz daraus neu, wobei wir das erste Feld überspringen. Die nachgestellte 1
am Ende bewirkt, dass jede Zeile (geändert oder nicht) gedruckt wird.
Kürzeres awk
auf die gleiche Weise wie sed
Lösung:
$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net