sed:匹配模式到上一行的结尾

时间:2015-02-25 21:04:16

标签: bash shell awk sed

我试图将回车符替换到上一行的末尾。 ^ M是回车。

示例:

hello 
hello 1^M 
hello 2^M 
hello 3^M
hello 4^M
hello 5^M
hello 6

我需要什么:

hello
hello 1 hello 2 hello 3 hello 4 hello 5
hello 6

我希望所有^ M替换为没有^ M的前一行的结尾。 你有什么主意吗。如何更换?

这是我的命令:

sed -i 's/^M//g' filtest.txt
sed -i ':a;N;$!ba;s/\n//g' filtest.txt

结果:

hellohello 1hello 2hello 3hello 4hello 5hello 6

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

这将执行它想要的样子,使用GNU awk进行多字符RS,第3个arg匹配():

$ gawk -v RS='^$' -v ORS= '{
    match($0,/\r.*\r/,a)
    gsub(/\r(\n|$)/,"",a[0])
    print substr($0,1,RSTART-1) a[0] substr($0,RSTART+RLENGTH)
}' file
hello 
hello 1hello 2hello 3hello 4hello 5
hello 6