Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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é big_smile 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 smile