如何取消转义文本文件?

How to unescape a text file?

我有一个文件 log.txt,内容如下:

systemd[1]: Starting dracut cmdline hook...\r\n[    8.759274] systemd[1]:

当我执行 cat log.txt 输出时:

systemd[1]: Starting dracut cmdline hook...\r\n[    8.759274] systemd[1]:

预期输出为 2 行(\r\n 将替换为明显的新行):

systemd[1]: Starting dracut cmdline hook...
[    8.759274] systemd[1]:

如何在 bash 终端中实现这一点?

您可以使用 echo -e

echo -e $(<log.txt)

无需任何外部命令,您可以使用 printf '%b\n' 而不是 cat:

printf '%b\n' "$(<log.txt)"

systemd[1]: Starting dracut cmdline hook...
[    8.759274] systemd[1]:
  • %b 扩展相应参数中的反斜杠转义序列
  • $(<log.txt) 是 bash 获取 log.txt
  • 内容的指令

你也可以使用sed:

$ cat log.txt | sed -e 's/\n/\n/' -e 's/\r//'

如果这不起作用,请尝试

$ cat log.txt | sed -e 's/\r//' -e 's/\n/\
/'

即在最后一个反斜杠后按回车键,完成下一行的命令。