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

2024-10-30 08:35:00
admin
原创
67
摘要:问题描述:有一些分隔文件,其字段中间(不是行尾)的换行符位置不正确,在 Vim 中显示为 ^M。它们源自 freebcp(在 Centos 6 上)导出的 MSSQL 数据库。以十六进制转储数据显示 \r\n 模式:$ xxd test.txt | grep 0d0a 0000190: 3932 3139 3...

问题描述:

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

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

我可以使用 awk 删除它们,但无法使用 sed 执行相同操作。

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

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

但这在 sed 中却没有,而是保留了换行符:

sed -i 's/
//g'

但这似乎没有效果:

sed -i 's/
//g'

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

对于这类任务,sed 更容易理解,但我正在努力学习两者。我使用 sed 的方式是否不正确,或者是否存在限制?


解决方案 1:

您可以使用命令行工具dos2unix

dos2unix input

或者使用tr命令:

tr -d '
' <input >output

实际上,您可以在以下方式中进行文件格式切换vim

方法A:

:e ++ff=dos
:w ++ff=unix
:e!

方法B:

:e ++ff=dos
:set ff=unix
:w

编辑

如果要删除`
文件中的序列,请尝试以下命令vim`:

:e ++ff=unix           " <-- make sure open with UNIX format
:%s/
//g            " <-- remove all 

:w                     " <-- save file

您的awk解决方案很有效。另外两个sed解决方案:

sed '1h;1!H;$!d;${g;s/
//g}' input
sed ':A;/
$/{N;bA};s/
//g' input

解决方案 2:

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

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

在这里,您让其将构造bash中的 '\r' 替换为实际的回车符$'...',然后将其sed作为命令传递给它。(假设您使用bash;其他 shell 应该具有类似的构造。)

解决方案 3:

`sed -e 's/
//g' input_file`

这对我有用。 -e-i命令的区别。

我还提到了,不同平台上的 see 行为有所不同。我的是:`sed --version
This is not GNU sed version 4.0`

解决方案 4:

另一种方法

awk 1 RS='
' ORS=
  • 将记录分隔符设置为`
    `

  • 将输出记录分隔符设置为空字符串

  • 1始终为真,并且在没有操作块的情况下{print}使用

解决方案 5:

我发现整个文件显示为一行,其中有“^M”符号,而不是新行。对我而言,唯一有效的解决方案是在 vi 中输入此命令(不要复制和粘贴)

:%s/
/
/g

然后使用“ZZ”保存并退出

此命令告诉 Vim 将每个回车符(\r,显示为 ^M)替换为换行符。% 告诉 Vim 将命令应用于文件中的每一行。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用