sed
eliminando todo hasta e incluyendo el primer punto si hay más de un punto en esa línea y haz esto para todo el archivo.
Antes de sed:
akamai.com
cdnjs.cloudflare.com
com.cdn.cloudflare.net
Después de sed:
akamai.com
cloudflare.com
cdn.cloudflare.net
Respuesta aceptada:
$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net
El sed
script primero hace coincidir las líneas que contienen al menos dos puntos usando la expresión regular \..*\.
(también se podría haber escrito [.].*[.]
). Para las líneas que coincidan con esto, se realiza una sustitución que elimina todo hasta el primer punto inclusive.
Usando awk
, siendo algo extenso en comparación con lo anterior:
$ 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
Aquí, cada vez que hay más de dos campos delimitados por puntos, dividimos la línea actual en puntos y luego volvemos a crear el registro actual a partir de eso, omitiendo el primer campo. El 1
final al final hace que se impriman todas las líneas (modificadas o no).
awk
más corto de la misma manera que el sed
solución:
$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net