sed multi occurences sous linux

sed multi occurences sous linux - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 29-01-2018 à 11:49:46    

bonjour à tous
 
j ai un nom de fichier du type [tata]salut les gars [titi][tutu]
 
je cherche à virer tout ce qui est entre crochets
j ai donc utiliser la commande sed
mM=`echo $mM | sed -r 's/\[.*\]//g'`
 
mais en fait il vire tout  je suppose qu il comprend qu il doive virer tout ce qu il y a entre le [ de tata et le ] de tutu
 
une idée ?
merci

Reply

Marsh Posté le 29-01-2018 à 11:49:46   

Reply

Marsh Posté le 29-01-2018 à 12:19:12    

salut,
 

Code :
  1. $ echo "$mM" | sed -r 's/\[[^]]*\]//g'                                                                                                                                                                                                             
  2. salut les gars


mettez les variables entre guillemets
n'utilisez plus la forme ancienne de substitution de commande ``, mais $()
pensez à utiliser les balises CODE.

Reply

Marsh Posté le 29-01-2018 à 14:38:03    

ok
merci beaucoup
je note tout cela

Reply

Marsh Posté le 29-01-2018 à 23:31:00    

Juste pour expliquer :  
 
Quand tu utilises le pattern \[.*\], tu dis de substituer un truc qui commence par [, se termine par ] et entre les temps, prends TOUT ce que tu trouves ... y compris [ ou ].
 
Dans la proposition de watael, il dit prend tout ce qui n'est pas ] entre [ et ]. Tu vois la différence ? Il s'arrête donc au premier crochet fermant qu'il rencontre.
 
Note également qu'il utilise le switch -r pour pouvoir utiliser des expressions régulières étendues.


---------------
Burn the museum, wipe your ass with the Mona Lisa, this way, at least, God will know your name.
Reply

Marsh Posté le 31-01-2018 à 19:49:45    

merci pour ces explications supplémentaires

Reply

Marsh Posté le 01-02-2018 à 07:20:47    

une derniere question
si je voulais recupérer chaque entité entre [] pour les traiter aux travers de variables, comment s y prendre ?
 
merci

Reply

Marsh Posté le 02-02-2018 à 07:15:47    

pas d'idéee ?

Reply

Marsh Posté le 02-02-2018 à 14:59:58    

Salut,

tophelille a écrit :

une derniere question
si je voulais recupérer chaque entité entre [] pour les traiter aux travers de variables, comment s y prendre ?
 
merci


 
Avec grep ?
 

Code :
  1. $ echo "[tata]salut les gars [titi][tutu]" | grep -Po '\[\K[^]]*'
  2. tata
  3. titi
  4. tutu


 
 ;)

Reply

Marsh Posté le 02-02-2018 à 20:14:07    

merci beaucoup
j ai essayé awk mais je tourne en rond
j aimerai pouvoir recuperer chaque entité dans une variable pour pouvoir faire des comparaisons entre elles

Reply

Marsh Posté le 02-02-2018 à 22:09:16    

read w1 w2 w3 <<< $(echo "[tata]salut les gars [titi][tutu]" | grep -Po '\[\K[^]]*' | tr '\n' ' ')
echo "$w1;$w2;$w3"
> tata;titi;tutu
 
?


---------------
Burn the museum, wipe your ass with the Mona Lisa, this way, at least, God will know your name.
Reply

Marsh Posté le 02-02-2018 à 22:09:16   

Reply

Marsh Posté le 03-02-2018 à 11:04:13    

tophelille a écrit :

merci beaucoup
j ai essayé awk mais je tourne en rond
j aimerai pouvoir recuperer chaque entité dans une variable pour pouvoir faire des comparaisons entre elles


 

Code :
  1. $ read -a tab -d '\n' < <(echo "[tata]salut les gars [titi][tutu]" | grep -Po '\[\K[^]]*')
  2. $ echo "${#tab[@]}"
  3. 3
  4. $ echo "${tab[2]}"
  5. tutu
  6. $ echo "${tab[0]}"
  7. tata
  8. $ echo "${tab[1]}"
  9. titi

Reply

Sujets relatifs:

Leave a Replay

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