sed
rimuovendo tutto fino e includendo il primo punto se c'è più di un punto su quella riga e farlo per l'intero file.
Prima sed:
akamai.com
cdnjs.cloudflare.com
com.cdn.cloudflare.net
Dopo sed:
akamai.com
cloudflare.com
cdn.cloudflare.net
Risposta accettata:
$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Il sed
lo script prima trova le righe che contengono almeno due punti usando l'espressione regolare \..*\.
(potrebbe anche essere stato scritto [.].*[.]
). Per le righe corrispondenti, viene eseguita una sostituzione che rimuove tutto fino al primo punto incluso.
Usando awk
, essendo un po' prolisso rispetto a quanto sopra:
$ 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
Qui, ogni volta che sono presenti più di due campi delimitati da punti, dividiamo la riga corrente in punti e quindi ricreiamo il record corrente da quello, saltando il primo campo. Il 1
finale alla fine fa stampare ogni riga (modificata o meno).
awk
più breve allo stesso modo di sed
soluzione:
$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net