由于我是sed的新手,我很高兴看到sed并不认为\ r \ n字符是有效的行分隔符。
有没有人知道如何告诉sed在处理多行文字时,我希望将哪个字符用作行分隔符?
答案 0 :(得分:1)
您可以使用awk的RS
(记录分隔符)变量指定它:awk 'BEGIN {RS = "\r"} ...
或者您可以转换为:tr '\r' '\n'
答案 1 :(得分:1)
(为了使下面的例子更清晰,更不明确,我将广泛使用the od
util。)
例如,不可能使用标志。我敢打赌,最好的解决方案是前面答案所引用的解决方案:使用tr
。如果你有一个如下文件:
$ od -xc slashr.txt
0000000 6261 0d63 6564 0d66
a b c \r d e f \r
0000010
使用tr
有多种方式;我们想要的是为它传递两个参数 - 两个不同的字符 - 而tr
将用第二个参数替换第一个参数。将文件内容作为tr '\r' '\n'
的输入发送,我们得到以下结果:
$ tr '\r' '\n' < slashr.txt | od -xc
0000000 6261 0a63 6564 0a66
a b c \n d e f \n
0000010
大!现在我们可以使用sed
:
$ tr '\r' '\n' < slashr.txt | sed 's/^./#/'
#bc
#ef
$ tr '\r' '\n' < slashr.txt | sed 's/^./#/' | od -xc
0000000 6223 0a63 6523 0a66
# b c \n # e f \n
0000010
但我认为你需要使用\r
作为行分隔符,对吧?在这种情况下,只需使用tr '\n' '\r'
来反转转化:
$ tr '\r' '\n' < slashr.txt | sed 's/^./#/' | tr '\n' '\r' | od -xc
0000000 6223 0d63 6523 0d66
# b c \r # e f \r
0000010
答案 2 :(得分:0)
据我所知,你不能。使用换行符作为分隔符有什么问题?如果您的输入具有DOS样式的\ r \ n行结尾,则可以对其进行预处理以删除它们,如有必要,可以在之后返回它们。