#1 Le 03/11/2008, à 14:13
- coupecoupe
[cut,sed]Je n'arrive pas à couper un texte comme je veux
Bonjour,
J'arrive à utiliser la commande cut mais celle ci ne me permet pas de couper ma ligne comme je veux.
Je suis donc allé voir du coté de sed mais celui-ci est beaucoup plus compliqué et je ne vois pas du tout comment faire avec.
Alors voici ma ligne :
toto tata titi tonton tatoo tatere
Cette phrase peux prendre des formes diverses, par exemple :
tatere tata tati tonton toto titi
Ce que je veux en sortie ce sont les premiers et derniers mots.
Pour la premiere : toto tatere
Pour la seconde : tatere titi
Moi je n'arrive qu'à prendre le premier mot avec : cut -d ' ' -f 1 Mais le probleme c'est qu'il me coupe tout le reste donc ca ne va pas.
Je dois donc supprimer remplacer ce qu'il y a entre toto et tatoo. Mais comment dire ça à sed de me replacer tout ce qu'il y a entre, c'est à dire "tata titi tonton tatoo" par un espace sachant que les mots autours sont variables ?
Je ne sais pas si la réponse est trop compliquée ou trop simple mais j'espere que vous saurez m'aider. Merci d'avance.
#2 Le 03/11/2008, à 14:24
- philou8237
Re : [cut,sed]Je n'arrive pas à couper un texte comme je veux
Tu choisis peut etre un peu compliqué avec sed mais bon :
echo "toto tata titi tonton tatoo tatere" | sed -re "s/^([a-z]+) .* ([a-z]+)$/\1 \2/g"
Pour l'explication :
^ :début de ligne
() : pour définir un bloc (ici ça définit \1)
[a-z]+ : Ensemble de lettres minuscules, formant un mot d'au moins une lettre (le + définit 1 ou plus)
' ' (espace) : ben... un espace
.* : n'importe quelle chaîne.
de nouveau un espace
enfin, le dernier mot, mis dans un bloc '()', pour l'utiliser en tant que '\2'
$ : fin de ligne
avec cut, ça donne plutot ça :
echo "toto tata titi tonton tatoo tatere" | cut -d " " -f 1,6
Bien sur, là tu dois connaître le nombre de champs.
Hors ligne
#3 Le 03/11/2008, à 14:46
- cep
Re : [cut,sed]Je n'arrive pas à couper un texte comme je veux
Ou bien avec awk :
echo "toto tata titi tonton tatoo tatere" |awk '{ print $1, $NF }'
ou :
awk '{ print $1, $NF }' ton_fichier
pour toutes les lignes va afficher le premier et le dernier mot.
Hors ligne
#4 Le 03/11/2008, à 14:57
- coupecoupe
Re : [cut,sed]Je n'arrive pas à couper un texte comme je veux
Merci à vous deux, je vais utiliser la methode cut avec la virgule que je ne connaissais pas puisque je connais le nombre de champs.
Effectivement, sed et vraiment compliqué Ca me fait penser à pragma en PHP, je deteste ces expressions regulieres meme si c'est ce qu'il y a de plus puissant, c'est trop difficile à relire et à comprendre.
#5 Le 03/11/2008, à 15:13
- coupecoupe
Re : [cut,sed]Je n'arrive pas à couper un texte comme je veux
Effectivement c'est surpuissant awk. D'autant qu'il gere les multi-espaces comme des espaces simples donc si le nombre de champs est defini, c'est surement ce qu'il y a de mieux