在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来搜索带有续行模式的行吗?
答案 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'结尾)