避免换行

避免换行

我有一些具有这种结构的文件:

2015-03-25 17:08:17
sysUpTimeInstance 93474;^M
1.ValueforState=2500

我想替换换行符,并将第三行保留为第二行,我的意思是,输出将如下所示:

2015-03-25 17:08:17
sysUpTimeInstance 93474;1.ValueforState=2500

我尝试使用 sed:

sed 's/^M$//' myfile.dat > mynewfile.dat

但它只删除了符号^M

有什么建议么?

答案1

2个想法:

  1. 使用 sed,对于任何以回车符结尾的行,加入下一行

    sed '/\r$/ {N; s/\r\n//} ' file
    
  2. 使用 awk,定义输入和输出的记录分隔符:

    awk -v RS='\r\n' -v ORS='' 1 file
    

答案2

假设您的帖子中显示的^M确实是回车符 ( \r),则应执行以下操作:

perl -pe 's/\r\n//g'

无论您的输入包含多少行,它都会起作用:所有以 结尾的行都\r\n将与后面的行连接。

答案3

可能会发生一些事情。

如果^M实际不是 2 个字符^M,而是某些编辑器表示回车 (CR) 字符的方式。例如。我的 Emacs 编辑器是这样显示的。该字符是end-of-lineWindows 文件系统中字符对的一部分:回车符(十六进制值 0x0D)+ 换行符(十六进制值 0x0A)。新行字符也称为换行符。 Unix 文件系统仅使用换行符来结束一行。要删除 Unix 样式行末尾不需要的回车符,sed可以使用以下正则表达式: 注意\x0D\r都适用于sed.注:\r是表示 的简写方式0x0D

sed '/\r$/{N; s/\r\n//}'  

如果实际上是和^M两个字符(当 Windows 文件错误地转换为 Unix 样式文件时有时会发生这种情况),那么您必须将 处理为特殊的正则表达式字符;您必须使用反斜杠:使用以下命令: ^M^escape\sed

sed '/\^M$/{N; s/\^M\n//}'

答案4

如果它确实只有三行,并且您总是想加入第二行和第三行,则可以使用以下命令:

sed -e '2N' -e 's/\r\n//'

N 命令会将下一行(即第三行)添加到第二行,然后替换将删除换行符。

相关内容