Quiero decodificar la codificación de URL, ¿hay alguna herramienta integrada para hacer esto o alguien podría proporcionarme un sed
código que lo haga?
Busqué un poco a través de unix.stackexchange.com y en Internet, pero no pude encontrar ninguna herramienta de línea de comandos para decodificar la codificación de URL.
Lo que quiero hacer es simplemente editar un txt
archivo para que:
%21
se convierte!
%23
se convierte#
%24
se convierte$
%26
se convierte&
%27
se convierte'
%28
se convierte(
%29
se convierte)
Y así.
shell-script
text-processing
sed
url
Nombre para mostrar
fuente
fuente
Respuestas:
Encontré estos revestimientos de Python one que hacen lo que quiere:
Ejemplo
Referencias
fuente
cat your_lovely_file.csv| python -c "import sys, urllib as ul; [sys.stdout.write(ul.quote_plus(l)) for l in sys.stdin]"
python
es 3 por defecto, esto dará como resultado un error. Cambiarpython
apython2
ayudas.python3
que pueda utilizar enimport urllib.parse as ul
lugar deimport urllib as ul
.sed
Pruebe la siguiente línea de comando:
o la siguiente alternativa usando
echo -e
:Nota: es posible que la sintaxis anterior no se convierta
+
en espacios, y puede comer todas las nuevas líneas.Puede definirlo como alias y agregarlo a sus archivos rc de shell :
Luego, cada vez que lo necesite, simplemente vaya con:
Golpetazo
Al crear secuencias de comandos, puede usar la siguiente sintaxis:
Sin embargo, la sintaxis anterior no manejará más (
+
) correctamente, por lo que debe reemplazarlos con espacios a través desed
.También puede usar lo siguiente
urlencode()
y lasurldecode()
funciones:Aquí hay una versión similar de Joel que se encuentra en: https://github.com/sixarm/urldecode.sh
bash + xxd
Función bash con
xxd
herramienta:Se encuentra en el archivo GIST de Cdown , también en stackoverflow .
PHP
Usando PHP puedes probar el siguiente comando:
o solo:
Úselo
-R
para entrada de línea múltiple.Perl
En Perl puedes usar
URI::Escape
.O para procesar un archivo:
awk
Trate anon solución:
Nota: El parámetro
-n
es específico de GNUawk
.Consulte: Uso de awk printf para codificar el texto .
decodificar nombres de archivo
Si necesita eliminar la codificación de URL de los nombres de archivo, use la
deurlname
herramienta derenameutils
(pdeurlname *.*
. Ej .).Ver también:
Relacionado:
fuente
awk
: Como esto hace uso de una función de bibliotecachr()
, existe una alta probabilidad de que solo funcione en GNU awk (gawk
). Sin embargo, en este caso casi no habrá equivalente para POSIXawk
, porque la-n
opción (que permite argumentos no decimales) ES unaawk
especialidad de GNU .sed
código me daxargs: argument line too long
un archivo con ≥2164 líneas.printf
no tienen en cuenta que la URL puede contener signos de porcentaje escapado como%25
. Los pasa a printf sin escapar de ellos para printf con otro signo de porcentaje como%%
.local LC_ALL=C
en la parte superior, de lo contrario, todos los caracteres anchos (es decir, japonés, chino, etc.) no se dividen correctamente en bytes.Hay una función incorporada para eso en la biblioteca estándar de Python. En Python 2, es
urllib.unquote
.O para procesar un archivo:
En Python 3, es
urllib.parse.unquote
.O para procesar un archivo:
En Perl puedes usar
URI::Escape
.O para procesar un archivo:
Si desea apegarse a las herramientas portátiles POSIX, es incómodo, porque el único candidato serio es awk, que no analiza los números hexadecimales. Consulte Uso de awk printf para codificar el texto de url para obtener ejemplos con implementaciones comunes de awk, incluido BusyBox.
fuente
Si desea utilizar un
sed
comando simple , utilice lo siguiente:Pero es más conveniente crear un script como (por ejemplo
sedscript
):Luego
sed -f sedscript < old > new
, ejecute , que saldrá como lo desee.Para facilitar, el comando
urlencode
también está disponible directamente en elgridsite-clients
paquete se puede instalar desde (sudo apt-get install gridsite-clients
en el sistema Ubuntu / Debian).Ejemplo de decodificación de URL:
fuente
sed
visita%20
secuencia de escape que se usa con frecuencia .s/%26/&/g
veces lo que hace. (Lo arreglé.)Perl one liner:
Ejemplo:
fuente
GNU awk
O
Convierta la URL del archivo codificado en porcentaje a un archivo local en bash
fuente
No puedo comentar sobre la mejor respuesta en este hilo , así que aquí está el mío.
Personalmente, uso estos alias para la codificación y decodificación de URL:
Ambos comandos le permiten convertir datos, pasados como un argumento de línea de comandos o leerlos desde una entrada estándar , porque ambos de una línea verifican si hay argumentos de línea de comandos (incluso vacíos) y los procesan o simplemente leen la entrada estándar de lo contrario.
actualizar 2017-05-23 (codificación de barra)
En respuesta al comentario de @ Bevor.
Si también necesita codificar la barra oblicua, simplemente agregue un segundo argumento vacío a la función de comillas, entonces la barra también se codificará.
Entonces, finalmente el
urlencode
alias en bash se ve así:Ejemplo
fuente
Y otro enfoque de Perl:
Deberá instalar el
URI::Encode
módulo. En mi Debian, simplemente podría ejecutarLuego, ejecuté el script anterior en un archivo de prueba que contiene:
El resultado fue (había guardado el script como
foo.pl
):fuente
Una respuesta en (principalmente Posix) shell:
Explicación:
-e 's/+/ /g
transforma cada uno+
en el espacio (como se describe en la norma de codificación de URL)-e 's/%\(..\)/\\\\x\1/g'
transformar cada uno%XX
de\\xXX
. Observe que uno de\
ellos será eliminado al citar las reglas.\\xXX
secuencias y muestra el resultado.Editar:
Dado
%
que siempre se debe interpretar en URL, es posible simplificar esta respuesta. Además, creo que es más limpio de usar enxargs
lugar de comillas inversas (gracias a @josch).Desafortunadamente, (como notó @josch) ninguna de estas soluciones es compatible con Posix ya que la
\x
secuencia de escape no está definida en Posix.fuente
... | sed 's/+/ /g;s/%\(..\)/\\\\x\1/g'
. La-e
opción puede omitirse aquí, de hecho ...printf
está integradodash
y no reconoce el\x
escape. Puede usar en/usr/bin/printf
lugar deprintf
para que funcione. Normalmente, debería poder usarlocommand printf
, pero parece que no funciona como debería. Continúa utilizando incorporado.\x
escapar no es parte de POSIX: pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html Durante mis pruebas vi otro problema. Es posible que desee reemplazar su..
expresión regular[a-zA-Z0-9][a-zA-Z0-9]
porque, de lo contrario, la entrada como '%%%' fallará. También agregués/%/%%/g
al final para asegurarme de escapar de los porcentajes para printf.Solo concha:
Agregue
--
o%b
para evitar que los argumentos que comienzan con un guión se traten como opciones.En zsh
${x//%/a}
agregaa
al final pero${x//\%/a}
reemplaza%
cona
.fuente
Aquí están los bits relevantes de otro script (que robé descaradamente de mi script de descarga de youtube.com de otra respuesta) que he escrito antes. Utiliza
sed
y el shell para construir un urldecode que funcione.No juro que sea completo, y de hecho lo dudo, pero manejó YouTube con suficiente seguridad.
fuente
Aquí hay una función BASH para hacer exactamente eso:
fuente
Otra solución usando ruby (la respuesta aceptada de Python no estaba funcionando para mí)
Ejemplo
fuente