2010-01-18 11 views
6

Je voudrais chercher et remplacer par sed et remplacer par quelque chose dans une variable qui contient des symboles spéciaux comme &.sed avec & in variable

Par exemple, je fait quelque chose comme ça:

sed "s|http://.*|http://$URL|" 

URL=1.1.1.1/login.php?user=admin&pass=password. Je pense que c'est devenu un problème parce que j'utilise ? et & dans ma variable.

Comment puis-je faire ma recherche et remplacer?

Merci à l'avance

Répondre

1

? la substitution n'est pas un problème. & doit être échappé comme \&.

+1

oui je sais. Mais je ne peux pas ajouter \ dans ma variable (ou je ne sais pas comment le faire avec une autre regexp) – pl0nk001

+0

De quelle variable parlez-vous? Si vous voulez échapper \, vous devez le faire comme ceci \ \ – kjagiello

+2

il signifie probablement l'URL est générée dynamiquement et il ne peut pas ajouter la barre oblique inverse manuellement.supplémentaire routine besoin d'être codé pour échapper et par programme – ghostdog74

1

Ce qui suit a fonctionné pour moi (dans un script bash):

URL="1.1.1.1/login.php?user=admin\\&pass=password" 

echo "http://something" | sed -e "s|http://.*|http://$URL|" 

La sortie était:

http://1.1.1.1/login.php?user=admin&pass=password 
+0

Je pense que OP ne peut pas ajouter le backslash manuellement – ghostdog74

+0

Hmm, je pense que vous avez raison, mais je vais devoir revenir à cette torsion, il se fait tard – pavium

1

utilisation awk

URL="1.1.1.1/login.php?user=admin&pass=password" 
awk -vurl="$URL" '/http:\/\//{ gsub("http://" , "http://"url) }1' file 

mais êtes-vous vous vraiment sûr que vouloir substituer http: // ??

+0

awk traite une chaîne de remplacement avec une esperluette comme Sed. –

0
$ URL="1.1.1.1/login.php?user=admin&pass=password" 
$ echo "http://abcd" | sed -e "\|http://.*|c$URL" 
1.1.1.1/login.php?user=admin&pass=password 
2
URL="1.1.1.1/login.php?user=admin&pass=password" 
URL=$(echo "$URL" | sed 's/&/\\&/') # substitute to escape the ampersand 
echo "$OTHER" | sed "s|http://.*|http://$URL|"