2010-01-18 11 views
6

Me gustaría buscar y reemplazar con sed y reemplazar con algo en una variable que contiene algunos símbolos especiales como &.sed con y en la variable

Por ejemplo he hecho algo así:

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

donde URL=1.1.1.1/login.php?user=admin&pass=password. Creo que se convirtió en un problema porque utilizo ? y & en mi variable.

¿Cómo puedo hacer mi búsqueda y reemplazar?

Gracias de antemano

Respuesta

1

? en la sustitución no es un problema. & debe ser escapado como \&.

+1

Sí, lo sé. Pero no puedo agregar \ en mi variable (o no sé cómo hacerlo con otra expresión regular). – pl0nk001

+0

¿De qué variable está hablando? Si quiere escapar, tiene que hacerlo así \ \ – kjagiello

+2

probablemente quiere decir que la URL se genera dinámicamente y no puede agregar la barra invertida manualmente. Es necesario codificar la rutina adicional para escapar y programar. – ghostdog74

1

A continuación trabajó para mí (en un script bash):

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

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

La salida fue:

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

Creo que OP no puede agregar la barra invertida manualmente. – ghostdog74

+0

Hmm, creo que tienes razón, pero tendré que volver a este punto, se está haciendo tarde. – pavium

1

uso awk

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

pero ¿estás realmente seguro de que simplemente quieres sustituir http: // ??

+0

awk trata una cadena de reemplazo con un ampersand igual que 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|"