当前位置: 首页 > 面试题库 >

在Linux上删除Windows换行符(sed vs. awk)

宋俊民
2023-03-14
问题内容

在字段中间(不是行尾)有一些带分隔符的换行符放置不当的文件,在Vim中显示为^ M。它们源自MSSQL数据库的freebcp(在Centos
6上)导出。以十六进制转储数据显示\ r \ n模式:

$ xxd test.txt | grep 0d0a
0000190: 3932 3139 322d 3239 3836 0d0a 0d0a 7c43

我可以用awk删除它们,但不能用sed来做同样的事情。

这在awk中有效,完全删除了换行符:

awk 'gsub(/\r/,""){printf $0;next}{print}'

但这在sed中没有,将换行保留在原处:

sed -i 's/\r//g'

似乎没有效果的地方:

sed -i 's/\r\n//g'

在sed表达式(ctrl + v,ctrl + m)中使用^ M似乎也不起作用。

对于这种任务,sed更容易理解,但是我正在努力学习更多有关这两者的知识。我使用sed的方式不正确,还是有限制?


问题答案:

我相信的某些版本sed不会识别\r为字符。但是,您可以使用一项bash功能来解决该限制:

echo $string | sed $'s/\r//'

在这里,您可以bash在将$'...'结构体中的实际回车符替换为\ r
之前,先将其传递给sed其命令。(假设您使用bash;其他shell应该具有类似的构造。)



 类似资料:
  • 本文向大家介绍Perl删除尾随的换行符,包括了Perl删除尾随的换行符的使用技巧和注意事项,需要的朋友参考一下 示例 该函数chomp将从传递给它的每个标量中删除一个换行符(如果存在)。chomp将使原始字符串变异,并返回删除的字符数 您也可以chomp一次输入多个字符串: 但是通常,没有人担心删除了多少换行符,因此chomp通常在空上下文中看到,并且通常是由于从文件中读取了行:        

  • 问题内容: Python与Perl 函数等效吗?如果是换行符,该函数将删除字符串的最后一个字符? 问题答案: 试用该方法(请参阅doc Python 2和Python 3)

  • 给定Java代码: 有没有一种方法可以删除我们在“//insert here”中插入一些内容的新行,而不修改其余代码,这样输出将从:

  • 本文向大家介绍在Windows 10上原生运行Linux,包括了在Windows 10上原生运行Linux的使用技巧和注意事项,需要的朋友参考一下 微软已经推出了适用于Linux的WSL子系统,它使用户可以直接从Windows 10运行自己喜欢的Linux发行版,而无需双启动或使用虚拟机。 适用于Linux的Windows子系统的局限性 尽管这是朝Microsoft正确方向迈出的一步,但就完整功能

  • 问题内容: 我正在尝试从字符串中删除所有换行符。我已经阅读了有关如何执行此操作的信息,但是由于某种原因,我似乎无法执行此操作。这是我正在逐步执行的操作: 而且我仍然在输出中看到换行符。我也尝试过rstrip,但是我仍然看到换行符。有人能阐明我为什么做错了吗?谢谢。 问题答案: 仅从字符串的开头和结尾删除字符。您要使用: