commande SED

commande SED - Shell/Batch - Programmation

Marsh Posté le 09-06-2004 à 10:32:15    

j'suis pas expert, alors voils:
 
avec la commande SED, ou autre chose d'ailleurs.
comment remplacer le mot "TEST" par "NEW (saut de ligne) NEW2"
en gros, un mot par une chaine de caractere sur 2 lignes.
 
pour preciser:
je ne veux pas passer 2 lignes en entree, mais avoir 2 lignes en sortie !
 
merci d'avance pour la réponse.
 
Arnaud

Reply

Marsh Posté le 09-06-2004 à 10:32:15   

Reply

Marsh Posté le 09-06-2004 à 11:14:30    

http://www.shellunix.com/sed.html


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 09-06-2004 à 11:51:07    

c gentil.
mais ça m'aide pas des masses ('suis un peu une bille en shell...)
une commande me mettrait + sur la voie.
 
je cherche à remplacer:
NEW_MESSAGES
 
par:
PART1
PART2
(sur 2 lignes)
 
j'en suis là:
 
# remplacement des occurences
ed - file.Txt <<EOF
1,\$a/NEW_MESSAGES/PART1 \n PART2  (le \n c pour l'exemple)
w
q
EOF
 
qui peut me pondre la bonne-bonne comande qui va bien?...
merci encore
Arnaud.

Reply

Marsh Posté le 09-06-2004 à 12:00:53    

Essaye ça:  
 
(Unix): cat source.txt | sed -s "s/NEW_MESSAGES/PART1\nPART2/g" > cible.txt
 
(Win): type source.txt | sed -s "s/NEW_MESSAGES/PART1\nPART2/g" > cible.txt


Message édité par kfman le 09-06-2004 à 12:01:30

---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 09-06-2004 à 12:12:10    

bah non, a priori.
 
par contre, je peux peux que je pourrais juste:
ajouter PART2 apres NEW_MESSAGES,  
puis faire pareil avec PART3.
pas grave si je conserve NEW_MESSAGES.
 
y'a une option d'insertion avec sed non?
 
genre /NEW_MESSAGES/i\ PART2 ? un truc dans le genre
 

Reply

Marsh Posté le 09-06-2004 à 12:19:42    

arnoarno a écrit :

bah non, a priori.
 
par contre, je peux peux que je pourrais juste:
ajouter PART2 apres NEW_MESSAGES,  
puis faire pareil avec PART3.
pas grave si je conserve NEW_MESSAGES.
 
y'a une option d'insertion avec sed non?
 
genre /NEW_MESSAGES/i\ PART2 ? un truc dans le genre


 
Reformule ta question plus clairement.
 
Sinon: cat source.txt | sed -s "s/NEW_MESSAGES/\0 PART2/g" > cible.txt  
 


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 09-06-2004 à 13:35:45    

desole pour le manque de clarte.
je veux soit:
 
1.  
substituer la ligne contenant NEW_MESSAGES par les 2 lignes PART2 (saut de ligne) PART3
 
=> dans mon fichier:
NEW_MESSAGES
=> en sortie (dans mon fichier):
PART2
PART3
 
2.
inserer les 2 lignes PART2 (saut de ligne) PART3 apres NEW_MESSAGES
 
=> dans mon fichier:
NEW_MESSAGES
=> en sortie (dans mon fichier):
NEW_MESSAGES
PART2
PART3
 
 
le cat n'a pas l'air de fonctionner, ça me ressort le "\O" dans ma chaine de caractere en sortie.
 

Reply

Marsh Posté le 09-06-2004 à 13:52:50    

Regarde si dans l'aide du SED, tu as l'option --text et dans ce cas utilise là...
 
Sinon essaye:

1)
cat source.txt | sed --text -s "s/NEW_MESSAGES/PART1\nPART2/g" > cible.txt
 
2)
cat source.txt | sed --text -s "s/NEW_MESSAGES/NEW_MESSAGES\nPART2\nPART3/g" > cible.txt


N'oublie pas d'ajouter --text. A la limite copikol l'aide du sed.


Message édité par kfman le 09-06-2004 à 13:59:57

---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 09-06-2004 à 14:56:00    

merci pour ton aide KFMAN,
mais ça passe pas, au niveau du cat.

Reply

Marsh Posté le 09-06-2004 à 15:15:10    

Bizzare, ce sont bien des fichiers textes ?
Si tu fais un cat seul, ça donne quoi ?
 
Peux-tu poster un exemple de sortie ?


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 09-06-2004 à 15:15:10   

Reply

Marsh Posté le 09-06-2004 à 15:30:38    

ok, g trouvé un moyen.
 
 
ed -file.txt <<EOF
/NEW-MESSAGES
.s/NEW_MESSAGES/PART2/
.a
PART3
.
w
q
EOF
 
 
je substitue le NEW_MESSAGES en PART2,
puis j'ajoute sur la ligne suivante PART3.
 
en fait, il me manquait le "." apres la parametre passé pour l'append
 
merci qd meme KFMAN

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed