es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes lograr el resultado deseado utilizando awk en lugar de sed. Aquí hay un ejemplo de comando que debería funcionar para ti:

    echo "http://sub.domain.com/file.jsp;jsessionid=2e62dbe69850d25bc7c6424ba59db?one=15&two=16" | awk 'BEGIN {FS="[;&?]"} {gsub(/jsessionid=[^&]*/, "jsessionid=ALGO", $2); for(i=3; i<=NF; i++) gsub(/=[^&]*/, "=ALGO", $i); print}' ORS="&"
    

    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 valor jsessionid en el segundo campo con ALGO.
    • 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 con ALGO.
    • 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.

Comments are closed.