Supprimer une partie d'un hostname avec SED

Résolu/Fermé
s_0ra Messages postés 5 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 5 mars 2014 - 5 mars 2014 à 10:06
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 5 mars 2014 à 11:45
Bonjour,

J'ai trouvé plusieurs sujets là dessus, mais je n'ai pas réussi à trouver une solution.
J'ai un peu de mal à utiliser SED, mais il me semble avoir déjà trouvé un début de solution.

En entrée j'ai un hostname du type "partie1.partie2.partie3".

J'aimerais récupérer uniquement ce qui se trouve après le premier point, et ce même si le hostname ne comporte que deux parties (partie1.partie2) ou même plus (partie1.partie2.partie3.partie4).

Actuellement, avec
echo "partie1.partie2.partie3" | sed "s/.*\.//"
il me renvoie uniquement "partie3"

Donc SED m'efface tout ce qu'il y a avant le dernier point, le point compris.
J'aimerais qu'il fasse la même chose, mais avec le premier point, pas le dernier, de façon à obtenir "partie2.partie3".

Merci d'avance pour votre aide.
A voir également:

4 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 mars 2014 à 11:45
hello
en bash
$ var="partie1.partie2.partie3"
$ echo ${var#*.}
partie2.partie3
$
2
aurelazy Messages postés 189 Date d'inscription vendredi 21 février 2014 Statut Membre Dernière intervention 30 janvier 2015 50
5 mars 2014 à 10:59
Salur s_Ora,

Voila une solution que j'ai trouvé,
sed "s/^\([a-zA-Z1-9]*\)\.\(.*\)$/\2/"
et la tu recuperes tout ce qui se trouve apres ton premier "."
1
s_0ra Messages postés 5 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 5 mars 2014 1
5 mars 2014 à 11:03
ça fonctionne :) Merci beaucoup !
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
5 mars 2014 à 11:02
Salut,

Dans ta solution le
grep
ne sert à rien ;-(

$ echo "partie1.partie2.partie3" | cut -d "." -f2-
partie2.partie3

Si tu veux une solution juste avec
grep
:
$ echo "partie1.partie2.partie3" | grep -Po "[^.]*.\K.*"
partie2.partie3
Ou juste avec
sed
:
$ echo "partie1.partie2.partie3" | sed 's/[^.]*.//'
partie2.partie3
1
s_0ra Messages postés 5 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 5 mars 2014 1
5 mars 2014 à 11:05
Oups, en effet !
Merci pour cette réponse complète, ça me laisse le choix ! :)
0
s_0ra Messages postés 5 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 5 mars 2014 1
Modifié par s_0ra le 5/03/2014 à 11:02
Finalement, j'ai trouvé moi même la solution avec une autre commande, elle est plus simple et je la comprends mieux !

echo "partie1.partie2.partie3" | grep . | cut -d "." -f2-
0