如何将含十六进制转义的输出转换为Unicode并保留换行符?
解决保留换行符的十六进制转义字符转换问题
你可以通过以下几种管道命令实现需求:
方法1:使用while read循环配合printf
cat demo | while read -r line; do printf "%b\n" "$line"; done
read -r line:逐行读取文件内容,-r参数避免反斜杠被当作转义符提前处理printf "%b\n" "$line":%b格式符会解析字符串中的十六进制转义序列(比如\x22),\n确保每行输出后保留换行
方法2:使用awk命令
cat demo | awk '{printf "%b\n", $0}'
- awk默认会逐行处理输入内容,
$0代表当前整行文本 - 同样通过
printf "%b\n"解析转义序列并保留换行
为什么原命令echo $(cat demo)不行?
$(cat demo)会执行命令替换,将文件中的所有换行符替换为空格,再传递给echo输出,所以最终结果是空格分隔的一行内容。而上面的两种方法都是逐行处理输入,既完成了转义解析,又保留了原始的换行结构。
内容的提问来源于stack exchange,提问作者gayavat
相关产品推荐
相关产品推荐

