Pages : 1
#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
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é
À moins que ton exemple soit trop simplifié...
En fait c'est tout à fait ça
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
Pages : 1