Je souhaite décoder le codage d'URL. Existe-t-il un outil intégré permettant de le faire ou est-ce que quelqu'un pourrait me fournir un sed
code qui le fera?
J'ai un peu cherché sur unix.stackexchange.com et sur Internet, mais je n'ai trouvé aucun outil en ligne de commande pour décoder le codage des URL.
Ce que je veux faire, c'est simplement éditer un txt
fichier afin que:
%21
devient!
%23
devient#
%24
devient$
%26
devient&
%27
devient'
%28
devient(
%29
devient)
Etc.
shell-script
text-processing
sed
url
Afficher un nom
la source
la source
Réponses:
Vous avez trouvé ces liners Python one qui font ce que vous voulez:
Exemple
Références
la source
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
est 3 par défaut, cela entraînera une erreur. Changerpython
pourpython2
aider.python3
vous pouvez utiliserimport urllib.parse as ul
au lieu deimport urllib as ul
.sed
Essayez la ligne de commande suivante:
ou l'alternative suivante en utilisant
echo -e
:Remarque: La syntaxe ci-dessus ne peut pas être convertie
+
en espaces et peut englober toutes les nouvelles lignes.Vous pouvez le définir comme alias et l'ajouter à vos fichiers rc de shell :
Ensuite, chaque fois que vous en avez besoin, il vous suffit de vous rendre avec
Frapper
Lors de la création de scripts, vous pouvez utiliser la syntaxe suivante:
Cependant, la syntaxe ci-dessus ne gérera pas pluses (
+
) correctement, vous devez donc les remplacer par des espacessed
.Vous pouvez également utiliser les fonctions
urlencode()
eturldecode()
suivantes:Voici une version similaire de Joel disponible sur: https://github.com/sixarm/urldecode.sh
bash + xxd
Fonction Bash avec
xxd
outil:Trouvé dans le fichier gist de cdown , également à stackoverflow .
PHP
En utilisant PHP, vous pouvez essayer la commande suivante:
ou juste:
Utilisez cette option
-R
pour la saisie de plusieurs lignes.Perl
En Perl, vous pouvez utiliser
URI::Escape
.Ou pour traiter un fichier:
awk
Essayez une solution unique :
Remarque: Le paramètre
-n
est spécifique à GNUawk
.Voir: Utilisation de awk printf pour urldecode text .
décodage des noms de fichiers
Si vous devez supprimer le codage d’URL des noms de fichiers, utilisez l’
deurlname
outil derenameutils
(par exempledeurlname *.*
).Voir également:
Apparenté, relié, connexe:
la source
awk
: Comme cela utilise une fonction de bibliothèquechr()
, il y a une forte probabilité que cela fonctionne uniquement sur GNU awk (gawk
). Cependant, dans ce cas, il n’aura guère d’équivalent pour POSIXawk
, car l’-n
option (autoriser les arguments non décimaux) EST UNEawk
spécialité de GNU .sed
code me donnexargs: argument line too long
pour un fichier avec ≥2164 lignes.printf
ne tiennent pas compte du fait que l’URL peut contenir des signes de pourcentage échappés, tels que%25
. Vous les transmettez à printf sans les échapper pour printf avec un autre signe de pourcentage comme%%
.local LC_ALL=C
au début, sinon tous les caractères larges (japonais, chinois, etc.) ne sont pas correctement décomposés en octets.Il existe une fonction intégrée pour cela dans la bibliothèque standard Python. En Python 2, c'est
urllib.unquote
.Ou pour traiter un fichier:
En Python 3, c'est
urllib.parse.unquote
.Ou pour traiter un fichier:
En Perl, vous pouvez utiliser
URI::Escape
.Ou pour traiter un fichier:
Si vous souhaitez vous en tenir aux outils portables POSIX, c'est délicat, car le seul candidat sérieux est awk, qui n'analyse pas les nombres hexadécimaux. Voir Utilisation de awk printf pour urldecode text pour des exemples d'implémentations courantes de awk, y compris BusyBox.
la source
Si vous souhaitez utiliser une
sed
commande simple , utilisez les éléments suivants:Mais il est plus pratique de créer un script du type (par exemple
sedscript
):Ensuite, lancez le programme
sed -f sedscript < old > new
, qui sortira comme vous le souhaitez.Pour plus de facilité, la commande
urlencode
est également disponible directement dans legridsite-clients
package sur lequel vous pouvez installer (par lesudo apt-get install gridsite-clients
système Ubuntu / Debian).Exemple d'URL de décodage:
la source
sed
visite%20
séquence d'échappement souvent utilisée .s/%26/&/g
passe. (Je l'ai corrigé.)Perl une doublure:
Exemple:
la source
GNU awk
Ou
Convertir l'URL du fichier encodé en pourcentage en fichier local dans bash
la source
Je ne peux pas commenter la meilleure réponse dans ce fil , alors voici le mien.
Personnellement, j'utilise ces alias pour le codage et le décodage d'URL:
Les deux commandes vous permettent de convertir des données, transmises en tant qu'argument de ligne de commande ou de les lire à partir d' une entrée standard , car les deux opérateurs vérifient s'il existe des arguments de ligne de commande (même vides) et les traitent ou lisent simplement une entrée standard.
mise à jour 2017-05-23 (codage par barre oblique)
En réponse au commentaire de @ Bevor.
Si vous devez également encoder la barre oblique, ajoutez simplement un deuxième argument vide à la fonction quote, la barre oblique sera également codée.
Donc, finalement,
urlencode
alias dans bash ressemble à ceci:Exemple
la source
Et une autre approche Perl:
Vous devrez installer le
URI::Encode
module. Sur ma Debian, je pourrais simplement courirEnsuite, j'ai exécuté le script ci-dessus sur un fichier test contenant:
Le résultat était (j'avais enregistré le script sous
foo.pl
):la source
Une réponse en shell (principalement Posix):
Explication:
-e 's/+/ /g
transforme chacun+
dans l'espace (comme décrit dans la norme de codage d'URL)-e 's/%\(..\)/\\\\x\1/g'
transformer chacun%XX
en\\xXX
. Remarquez que l'un\
sera supprimé en citant des règles.\\xXX
séquences et affiche le résultat.Modifier:
Puisque
%
doit toujours être interprété dans les URL, il est possible de simplifier cette réponse. En complément, je pense qu'il est plus propre à utiliser auxargs
lieu de backquotes (grâce à @josch).Malheureusement, (comme @josch l’a remarqué), aucune de ces solutions n’est conforme à Posix car
\x
la séquence d’échappement n’est pas définie dans Posix.la source
... | sed 's/+/ /g;s/%\(..\)/\\\\x\1/g'
. L'-e
option peut être omise ici en fait ...printf
est intégrédash
et il ne reconnaît pas l'\x
évasion. Vous pouvez utiliser/usr/bin/printf
au lieu deprintf
pour le faire fonctionner. Normalement, vous devriez pouvoir utilisercommand printf
, mais cela ne semble pas fonctionner comme il se doit. Il continue à utiliser intégré.\x
échapper ne fait pas partie de POSIX: pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html Au cours de mes tests, j'ai constaté un autre problème. Vous voudrez peut-être remplacer votre..
expression rationnelle par[a-zA-Z0-9][a-zA-Z0-9]
car sinon, une entrée telle que '%%%' échouera. J'ai aussi ajoutés/%/%%/g
à la fin pour m'assurer d'échapper aux pourcentages pour printf.Shell seulement:
Ajoutez
--
ou%b
empêchez les arguments commençant par un tiret d'être traités comme des options.Dans zsh
${x//%/a}
ajoutea
à la fin, mais${x//\%/a}
remplace%
para
.la source
Voici les extraits pertinents d'un autre script (que j'ai simplement volé sans vergogne de mon script de téléchargement youtube.com d'une autre réponse) que j'ai écrits auparavant. Il utilise
sed
et le shell pour construire un urldecode fonctionnel.Je ne jurerai pas que c'est complet - et en fait j'en doute - mais il a sûrement géré youtube.
la source
Voici une fonction BASH pour faire exactement cela:
la source
Une autre solution utilisant ruby (la réponse acceptée par Python ne fonctionnait pas pour moi)
Exemple
la source