url - 使用 Mac 终端将十六进制代码转换为 URL 中的 ASCII 字符
问题描述
我有一个包含许多 URL 的文本文件,但是其中一些包含十六进制代码,例如,%5D
等。我想使用终端命令将这些十六进制代码转换为 ASCII 字符。例如,我想要这个:
%28
%3D
https://51.15.54.108/%3Fdir%3DCloud
变成这样:
https://51.15.54.108/?dir=Cloud
我想,一定有一种方法可以使用sed
,或者也许. 我也愿意使用 python。提前致谢!awk
ex
iconv
解决方案
您可以使用以下urlencode()
和urldecode()
功能:
重击
urlencode() {
# urlencode <string>
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf '%%%02X' "'$c" ;;
esac
done
}
urldecode() {
# urldecode <string>
local url_encoded="${1//+/ }"
printf '%b' "${url_encoded//%/\\x}"
}
请注意,上面urldecode()
假设数据不包含反斜杠。
使用函数创建一个脚本并加载您的文件:
#!/bin/bash
urldecode() {
# urldecode <string>
local url_encoded="${1//+/ }"
printf '%b\n' "${url_encoded//%/\\x}"
}
input="/Users/<name>/urls.txt"
while IFS= read -r line
do
urldecode $line >> decoded.txt
done < "$input"
或命令行
VAR="https://51.15.54.108/%3Fdir%3DCloud" ; printf -v VAR "%b" "${VAR//\%/\x}" ; echo $VAR
更新:
测试脚本
#!/bin/bash
input="/Users/<name>/urls.txt"
while IFS= read -r line
do
echo $line
done < "$input"
这应该从您的 URL 文件中输出每一行
推荐阅读
- c - 通过网络发送不同大小数据的最佳实践
- javascript - 无法使用 Sequelize 在数据库 SQLite-Database 中找到匹配项
- html - 固定位置干扰现场滚动
- kotlin - 如何在 Kotlin 中使用 Associate
- typescript - 为什么我们应该使用“extends”关键字而不是类型本身?
- javascript - 如何在页面上的两个 DataTable 之间切换?
- android - 数据库不更新值
- python - 如何在 Matplotlib 中使用 bin 作为我的 xticks?
- google-cloud-platform - 无法在 Google 云配额编辑屏幕上选择要编辑的配额
- docker - 使用 Terraform 和 Kubernetes 部署时如何修改 Docker 容器中的文件?