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 :
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=""}'
En vous remerciant.

ps : Je débute en shell, si vous avez d'autres remarques n'hésitez pas.