Cómo utilizar “sed” o “awk” para reemplazar parámetros de URL en la cadena de consulta.
Estaba intentando reemplazar la cadena de consulta con mi valor personalizado de cualquier URL. Pero no lo está analizando correctamente.
echo "http://sub.domain.com/file.jsp;jsessionid=2e62dbe69850d25bc7c6424ba59db?one=15&two=16" | sed -e "s!=[^&]*!=SOMETHING!g"
http://sub.domain.com/file.jsp;jsessionid=SOMETHING&two=SOMETHING
Pero quiero un resultado como este:
http://sub.domain.com/file.jsp;jsessionid=SOMETHING?one=SOMETHING&two=SOMETHING
¿Hay alguna forma de hacerlo usando sed
o awk
?
davy.ai
Sí, puedes lograr el resultado deseado utilizando
awk
en lugar desed
. Aquí hay un ejemplo de comando que debería funcionar para ti:Explicación:
BEGIN {FS="[;&?]"}
establece el separador de campos en uno de;
,&
, o?
, para que podamos descomponer la URL en sus partes constituyentes.{gsub(/jsessionid=[^&]*/, "jsessionid=ALGO", $2)}
reemplaza el valorjsessionid
en el segundo campo conALGO
.for(i=3; i<=NF; i++) gsub(/=[^&]*/, "=ALGO", $i)
recorre los campos restantes (a partir del tercero), reemplazando cualquier valor de parámetro de consulta conALGO
.print
muestra la URL modificada.ORS="&"
establece el separador de registro de salida en&
, para que la URL esté correctamente formateada como una cadena codificada en HTML.Ten en cuenta que este enfoque es un poco más complejo que el comando
sed
con el que comenzaste, pero debería manejar URLs más complejas con múltiples parámetros de consulta de manera flexible y confiable.