sed
supprimer tout jusqu'au premier point inclus s'il y a plus d'un point sur cette ligne et faire cela pour l'ensemble du fichier.
Avant sed :
akamai.com
cdnjs.cloudflare.com
com.cdn.cloudflare.net
Après sed :
akamai.com
cloudflare.com
cdn.cloudflare.net
Réponse acceptée :
$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Le sed
le script correspond d'abord aux lignes qui contiennent au moins deux points en utilisant l'expression régulière \..*\.
(aurait pu aussi s'écrire [.].*[.]
). Pour les lignes correspondant à cela, une substitution qui supprime tout jusqu'au premier point inclus est effectuée.
Utiliser awk
, étant un peu long par rapport à ce qui précède :
$ 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
Ici, chaque fois qu'il y a plus de deux champs délimités par des points, nous divisons la ligne actuelle en points, puis recréons l'enregistrement actuel à partir de cela, en sautant le premier champ. Le 1
de fin à la fin provoque l'impression de chaque ligne (modifiée ou non).
awk
plus court de la même manière que le sed
solution :
$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net