[RESOLU] [SED] supprimer les espaces inutiles

supprimer les espaces inutiles [RESOLU] [SED] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 19-06-2013 à 10:43:43    

Bonjour,
je débute en SED et je n'arrive pas à isoler correctement ma chaine.  
 
j'ai une chaine de la forme :
                du texte<
je souhaite récupéré 'du texte'. J'ai donc décomposé la chaine en :
- 0 ou plusieurs espaces
- n'importe quel caractere différent de <
 

Code :
  1. sed 's/[ ]*\([^<]*\).*/\1/'


 
Jusque la je suis content de moi :). Mais je viens de m'apercevoir que la résultat peut se terminer par plusieurs espaces. Je souhaite donc les supprimer.
comment remplacer [^<] ? J'ai tenté sans succès :

Code :
  1. sed 's/[ ]*\([^[ ]*<]*\).*/\1/'
  2. sed 's/[ ]*\([^<]*\)[ ]*.*/\1/'


Message édité par slc le 19-06-2013 à 18:05:44
Reply

Marsh Posté le 19-06-2013 à 10:43:43   

Reply

Marsh Posté le 19-06-2013 à 15:46:18    

$ cat > toto
 sfffsd <fdsfsd
 fdsfds     s <sfsdfs
^D
$ sed 's/.*</</' toto
<fsdfd
<sfdsffs
$ rm toto

 

c'est ça que tu veux faire ? :hello:


Message édité par goblin_rieur le 19-06-2013 à 15:46:56

---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
Reply

Marsh Posté le 19-06-2013 à 15:50:28    

sed 's/.*</</;s/[ ]*$//' fichier


 
le second substitute c'est pour ajouter la suppression des espaces de fin de ligne


---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
Reply

Marsh Posté le 19-06-2013 à 18:05:13    

Un grand merci. J'avais contourné le problème en effectuant un nouveau sed sur mon fichier csv final. Mais ca ne faisait pas tres 'propre'.
Je savais pas que l'on pouvait enchainer plusieurs commandes dans un sed. C'est pour cela que j'essayais de tout faire avec un seul substitute. Ce qui a posteriori est complement cretin ;)
 
en fait je parse un html (je sais awk et sed sont pas fait pour ca :) )
 
     mon texte      <encore du code
je veux obtenir
mon texte
sans espace avant et apres.  
 
Donc en gardant mon premier sed et en ajoutant ton second substitute ca va fonctionner
 
Encore merci.

Reply

Marsh Posté le 18-08-2013 à 18:27:25    

Salut,
 
Testé que sur le texte fourni en échantillon, donc peut ne pas marcher à 100%.
 
Le "cat -A" n'est là que pour faire apparaître les fins de lignes.  

Code :
  1. $ echo "${A}" | cat -A


    mon texte      <encore du code $


 

Code :
  1. $ echo "${A}" | sed 's/^ \s\+\(.*[^ ]\)\s\+<.*/\1/' | cat -A


mon texte$


 ;)
 
Édit : Plus simple et qui répond mieux à la demande :

Code :
  1. $ echo -e "${A}\n${B}"


    mon texte      <encore du code  
     mon texte<encore du code


 

Code :
  1. $ echo -e "${A}\n${B}" | sed 's/^ \s\+\(.*[^ ]\) *<.*/\1/' | cat -A


mon texte$
mon texte$



Message édité par zipe31 le 18-08-2013 à 18:34:31

---------------
$ man woman
Reply

Sujets relatifs:

Leave a Replay

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