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 05/01/2011, à 18:38

iuchiban

sed conditionné

Bonjour tout le monde,

j'ai besoin d'aide sur du sed.
J'ai le fichier suivant :

A.TOTO
A.TOTO.DLQ
A.TATA
A.TATA.DLQ
B.TOTO
B.TATA

C.TOTO
C.DLQ.TOTO

Je souhaite avoir :

TOTO
TOTO.DLQ
TATA
TATA.DLQ
TOTO
TATA

TOTO
DLQ.TOTO

En gros :
si pas de DLQ prendre ce qu'il y a après le dernier point.
s'il y a DLQ dans le nom, prendre ce qu'il y a après l'avant dernier point

J'ai déjà ce bout de code pour la première partie :

sed -e '/DLQ/! s/^.*[\.]\(.[^\.]*$\)/\1/'

Mais la deuxième partie me pose problème.

Merci d'avance big_smile


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#2 Le 05/01/2011, à 18:57

iuchiban

Re : sed conditionné

le temps de poster, et de réfléchir, j'ai réussi a faire ce que je veux :

cat Test_sed.sh | sed -e '/DLQ/ s#^.*\.\([^\.]*\)\(\.[^\.]*$\)#\1\2#' -e '/DLQ/! s/^.*[\.]\(.[^\.]*$\)/\1/'
TOTO
TOTO.DLQ
TATA
TATA.DLQ
TOTO
TATA

TOTO
DLQ.TOTO

Si ça peut servir à d'autres, je laisse mon message.

Bonne soirée.


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#3 Le 05/01/2011, à 19:22

Levi59

Re : sed conditionné

Ou bien directement en bash et sans sed :

cat ./test.txt > >(
rm ./test.txt
while { read line; }
do
printf "%s\n" "${line#*.}" >> ./test.txt
done
)

Mais si tu veux vraiment utiliser sed, ceci me parait plus simple :

sed -i 's/^[^\.]*\.//' test.txt

À moins que ton exemple soit trop simplifié...

Dernière modification par Levi59 (Le 05/01/2011, à 19:32)

Hors ligne

#4 Le 06/01/2011, à 22:05

ehmicky

Re : sed conditionné

Salut,
juste une variation de ce que dit Levi, en full-bash (car sans rm ni cat) :

while read
do
    echo "${REPLY#*.}"
done <<<"$(<FICHIER)" >FICHIER

Dernière modification par ehmicky (Le 06/01/2011, à 22:31)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#5 Le 07/01/2011, à 09:57

iuchiban

Re : sed conditionné

Levi59 a écrit :

À moins que ton exemple soit trop simplifié...

En fait c'est tout à fait ça hmm

Mes noms à couper peuvent posséder beaucoup de champs entre les . mais je veux que le dernier ou les deux derniers champs.
Du coup, même si vos manière de faire sont vraiment sympa, ça ne convient pas pour mon cas.

Mon sed est bourrin, mais il fait ce qu'il faut.
Je l'ai simplifié un peu d'ailleurs :

$ cat Test_sed.sh
A.B.C.azerty.INST1.A.TOTO
A.B.C.azerty.INST1.A.TOTO.DLQ
A.B.C.azerty.INST1.A.TATA
A.B.C.azerty.INST1.A.TATA.DLQ
A.B.C.azerty.INST1.B.TOTO
A.B.C.azerty.INST1.B.TATA

INST2.C.TOTO
INST2.C.DLQ.TOTO

TUTU

$ cat Test_sed.sh | sed -e '/DLQ/ s#^.*\.\([^\.]*\.[^\.]*$\)#\1#' -e '/DLQ/! s/^.*[\.]\(.[^\.]*$\)/\1/'
TOTO
TOTO.DLQ
TATA
TATA.DLQ
TOTO
TATA

TOTO
DLQ.TOTO

TUTU

Dernière modification par iuchiban (Le 07/01/2011, à 09:57)


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#6 Le 07/01/2011, à 15:49

ehmicky

Re : sed conditionné

Ok, donc au final je suis tombé sur une ligne quasi-identique à la tienne (sans même l'avoir regardé) :

sed '/DLQ$/! s/.*\.\([^.]*\)$/\1/g ; /DLQ$/ s/.*\.\([^.]*\.DLQ\)$/\1/g'

Dernière modification par ehmicky (Le 07/01/2011, à 15:59)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne