GNU sed在Windows和行终止字符中

时间:2011-11-02 07:14:39

标签: sed gnu

在Windows / DOS版本的GNU sed中使用什么字符来终止一行是有点混乱的。特别是,在N命令之后用于连接2行的换行符(\ r \ n vs \ n)char是什么?

我想要的是创建一个脚本,该脚本结合使用行继续符号\ syntax的C ++源代码。

e.g。

int \
a=\
10;

应该通过我的脚本结合到此:

int a=10;

显然我应该使用类似“N”命令的东西,然后使用's'命令来替换模式空间中看起来像\后跟带有空字符串的换行符的任何内容。但在Windows中,这个换行符是\ n \ n \ n \ n \ n \ n \ n在“N”命令之后?

我应该使用\\\ r \ n或\\\ n来搜索带有续行模式的行吗?

3 个答案:

答案 0 :(得分:1)

我不完全确定sed的Windows / DOS版本,但如果它与this question中的版本一样,它会神奇地将\r\n转换为\n进行处理。与链接问题一样,您可能需要额外的s/$/\r/才能重新使用\r。我测试了

sed -e :a -e '/\\$/N; s/\\\n//; ta; s/$/\r/'

在Cygwin中,似乎有效。

答案 1 :(得分:0)

  

我应该使用\\ r \ n或\\ n来搜索带有续行模式的行吗?

为什么不同时使用?即在sed

s/\r\?\n//g

将匹配\r\n\n。如果您正在使用ERE,则可能不需要转义?

答案 2 :(得分:0)

在Windows上使用GNU sed时,您不必担心\ r \ n vs \ n \ n。该程序以“文本”模式打开文件,该模式将\ r \ n视为Unix系统上的\ n字符。

如果您想禁用此模式,可以在Windows计算机上使用'-b'或'--binary'选项,并将\ r \ n视为非终端 - 行字符,例如在行的“中间”搜索'\ n'(即以'\ n'结尾)