Bonjour à tous,
Mon problème n'en ai plus vraiment un puisque j'ai trouvé une solution subsidiaire. Mais il me reste quelques interrogations à éclaircir sur la command sed.
Voila l'histoire. J'ai un fichier trié contenant une URL par ligne. Je souhaite récupérer les URL entre l'URL $1 et $2. $1 et $2 sont fournies par l'utilisateur et contiennent le caractère "/" puisque ce sont des URLs.
La commande sed '/$1/,/$2/p' permet de faire ça très bien... Sauf qu'il y a les "/". Et sous cette forme de sed je n'ai pas réussi à utiliser un autre caractère que "/" dans la commande ( sed '_$1_,_$2_p' ne marche pas ) Le pourquoi du comment, si vous avez la réponse?
Donc L'autre solution est de modifier les "/" de $1 et $2 par des "\/"
Puis d'appliquer notre sed '/$1/,/$2/p'. Mais ça fait un peu moche je trouve ( Et étrangement ça ne fonctionne plus dans mon petit script cf plus bas )
Ou alors avec un awk un peu long... mais la aussi pourquoi utiliser awk alors qu'une command sed existe déjà
Avez vous déjà été confronté à cette situation? Comment utiliser la commande sed avec des "/" sous cette forme? Y a t'il plus simple?
Un petit script qui illustre le problème :
En vous remerciant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #!/bin/bash data=`echo -e "t/1 t/2 t/3 t/4 t/5 t/6 t/7"` echo "$data" echo -e "sed between t/3 and t/5 without var ( t\/3 & t\/5)" echo "$data" | sed -n '/t\/3/,/t\/5/p' t3="t/3" t5="t/5" echo -e "sed between $t3 and $t5 with original var" echo "$data" | sed -n "/$t3/,/$t5/p" echo "sed between $t3 and $t5 with temp var ( replace / by \/ )" e3=`echo "$t3" | sed -e 's_/_\\\/_g'` e5=`echo "$t5" | sed -e 's_/_\\\/_g'` echo "temp var : $e3" echo "temp var : $e5" echo "$data" | sed -n -e "/$e3/,/$e5/p" echo -e "awk between $t3 and $t5 with var" echo "$data" | awk -v t3=${t3} -v t5=${t5} -v show="" '$0==t3 {show++} show {print} $0==t5 {show=""}'
ps : Je débute en shell, si vous avez d'autres remarques n'hésitez pas.
Partager