linux - 如何在 Linux 终端中删除 CRLF 字符(回车换行符)?

标签 linux shell sed terminal newline

我从 Oracle 数据库接收到一个简单的输出,由于某种原因,输出变成了一个新行,我无法删除该返回字符。

这是我已经尝试过的:

sed 's/^M//g'
sed 's/\r//g'
sed 's/\n//g'
sed 's/\r\n//g'
sed 's/\r$//'
tr -d '\r' < infile > outfile
sed -i.bak 's/\r$//g' <filename>
sed 's/\r$//g'

然后我尝试了 dos2unix 但仍然没有...


通过将输出转换为十六进制,我可以看到神秘字符实际上是一个 CRLF,但之前的“CRLF 删除”解决方案似乎都不起作用。

  • 正常输出

The normal output

  • 十六进制输出

The output converted in hexa

预先感谢您的帮助! :)

最佳答案

要删除 CRLF 字节,在 Perl 中要容易得多:

perl -pe 's/\x0d\x0a//g'

或者你可以运行 sedtr:

sed 's/\r$//' file | tr -d '\n'

C2 A7在UTF-8中对应U+00A7或unicode中的SECTION SIGN

将两个字节都指定给 sed 以将其删除:

sed 's/\xc2\xa7//g'

关于linux - 如何在 Linux 终端中删除 CRLF 字符(回车换行符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72798210/

相关文章:

c - extern char **environ 和 extern char *environ[] 有什么区别

linux - 如何使用 shell 脚本查找起始括号和相应结束括号之间的模式

php - 从 php 脚本运行 git pull

Python 程序可以在 Windows 上运行,但不能在 Linux 上运行

shell - 如何使用 Vim 更改现有文件的编码

bash - Shell 脚本和 CRON 问题

linux - shell 脚本不使用 SMTP 服务器准确发送邮件

linux - 在这种情况下如何使用 shell、bash 或 sed 命令

mysql - 将带有子线的行转换为单行

regex - 使用 sed 忽略注释 (#),但保持行不变