comment enchainer des sed sur un fichier script

comment enchainer des sed sur un fichier script - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 16-11-2008 à 12:59:11    

Bonjour à tous je suis totalement débutant en commande linux, pas de pb toutefois en bat (msdos).
 
avec bcp de recherche sur le net, j'ai créé toute les commandes sed qui me permettent de modifier mon fichier d'origine (généré par une commande wget -O bus.txt "http://..." ), je les ai testé une apres l'autre par telnet et tout fonctionne pas de pb.
 
voici la liste de sed:

Code :
  1. sed -i '/<html>/,/Les prochains passages /d' bus.txt
  2. sed -i '/Horaires en temps /,/<\/html>/d' bus.txt
  3. sed -i s/"<td"/"=<td"/g bus.txt
  4. sed -i s/"<tr"/"$<tr"/g bus.txt
  5. sed -i s/"<[^>]*>"/""/g bus.txt
  6. sed -i '/^[[:space:]]*$/d' bus.txt
  7. sed -i 's/^[[:space:]]*//' bus.txt
  8. sed -i ':a;N;$!ba;s/\n//g' bus.txt
  9. sed -i s/"="/" "/g bus.txt
  10. sed -i 's/\$/\n/g' bus.txt
  11. sed -i '/^[[:space:]]*$/d' bus.txt
  12. sed -i 's/^[[:space:]]*//' bus.txt
  13. sed -i s/"&ecirc;"/"ê"/g bus.txt


 
si je met le tout dans un script (bus.sh) dans le meme dossier contenant bus.txt, j'obtenais une série de
: No such file or directory
: not found:
 
un collègue du taf ma dit qu'il fallait tout passer en relatif dans un script, mais rien n'y fait:
 

Code :
  1. /bin/sed -i '/<html>/,/Les prochains passages /d' /tmp/bus.txt
  2. /bin/sed -i '/Horaires en temps /,/<\/html>/d' /tmp/bus.txt
  3. /bin/sed -i s/"<td"/"=<td"/g /tmp/bus.txt
  4. /bin/sed -i s/"<tr"/"$<tr"/g /tmp/bus.txt
  5. /bin/sed -i s/"<[^>]*>"/""/g /tmp/bus.txt
  6. /bin/sed -i '/^[[:space:]]*$/d' /tmp/bus.txt
  7. /bin/sed -i 's/^[[:space:]]*//' /tmp/bus.txt
  8. /bin/sed -i ':a;N;$!ba;s/\n//g' /tmp/bus.txt
  9. /bin/sed -i s/"="/" "/g /tmp/bus.txt
  10. /bin/sed -i 's/\$/\n/g' /tmp/bus.txt
  11. /bin/sed -i '/^[[:space:]]*$/d' /tmp/bus.txt
  12. /bin/sed -i 's/^[[:space:]]*//' /tmp/bus.txt
  13. /bin/sed -i s/"&ecirc;"/"ê"/g /tmp/bus.txt


 
les cdes en relatifs fonctionnant en telnet,je pensais que le pb venait d'un verrouillage du fichier bus.txt lors de la modification par un sed -i, j'ai donc voulu raccourcir par une seule ligne grace à "sed -e" comme suit:
 

Code :
  1. /bin/sed -i -e '/<html>/,/Les prochains passages /d' -e '/Horaires en temps /,/<\/html>/d' -e s/"<td"/"=<td"/g -e s/"<tr"/"$<tr"/g -e s/"<[^>]*>"/""/g -e '/^[[:space:]]*$/d' -e 's/^[[:space:]]*//' -e ':a;N;$!ba;s/\n//g' -e s/"="/" "/g -e 's/\$/\n/g' -e '/^[[:space:]]*$/d' -e 's/^[[:space:]]*//' -e s/"&ecirc;"/"ê"/g /tmp/bus.txt


 
mais cette commande  

Code :
  1. -e ':a;N;$!ba;s/\n//g'

 
plombe le resultat attendu
 
j'ai alors scindé en 2 lignes, testé par telnet ca fonctionne très bien (et d'une rapidité je suis bluffé de la puissance) :

Code :
  1. /bin/sed -i -e '/<html>/,/Les prochains passages /d' -e '/Horaires en temps /,/<\/html>/d' -e s/"<td"/"=<td"/g -e s/"<tr"/"$<tr"/g -e s/"<[^>]*>"/""/g -e '/^[[:space:]]*$/d' -e 's/^[[:space:]]*//' /tmp/bus.txt
  2. /bin/sed -i -e ':a;N;$!ba;s/\n//g' -e  s/"="/" "/g -e 's/\$/\n/g' -e  's/^[[:space:]]*//' -e s/"&ecirc;"/"ê"/g /tmp/bus.txt


 
mais dans un script toujours même probleme not found a chaque fois donc ma retouche n'a servi à rien!
 
je rate quelque chose ou n'applique pas certaines règles pour l'écriture d'un script conforme.
 
quelqu'un aurait-il une idée?
 

Reply

Marsh Posté le 16-11-2008 à 12:59:11   

Reply

Marsh Posté le 16-11-2008 à 15:28:25    

Ton fichier bus.txt contient quoi ?
Tu cherche à obtenir quoi exactement ?

Reply

Marsh Posté le 18-11-2008 à 21:48:03    

Sinon, pour grouper des sed sans se faire ch... :


sed 's/foo/bar; s/base/zoo/; s/bar/nabé/'


 
Ou encore :


sed 's/foo/bar | s/base/zoo/ | s/bar/nabé/'

Reply

Sujets relatifs:

Leave a Replay

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