$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net
O script sed
corresponde primeiro às linhas que contêm pelo menos dois pontos usando a expressão regular \..*\.
(também pode ter sido escrito [.].*[.]
). Para as linhas correspondentes, uma substituição que remove tudo até e incluindo o primeiro ponto é executada.
Usando awk
, sendo um pouco longo em comparação com o acima:
$ 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
Aqui, sempre que houver mais de dois campos delimitados por ponto, dividimos a linha atual em pontos e recriamos o registro atual, pulando o primeiro campo. O 1
no final faz com que todas as linhas (modificadas ou não) sejam impressas.
Shorter awk
da mesma maneira que a sed
solution:
$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net