用sed替换换行符分隔的花括号

时间:2018-03-01 18:08:33

标签: bash sed

我需要替换这个

    },   <-here there is a \n
    {

}{

关于\ n

并不重要

我试过这个:

sed "s/},\n{/}{/g" 

但不起作用。

我尝试过其他奇怪的解决方案,但效果不佳,因为在文件中还有很多以{开头的行。

你能建议一些解决方案吗?

4 个答案:

答案 0 :(得分:3)

sed 解决方案:

示例test.txt文件:

afa
asdasd
},
{
sdfasd
},
{
sed '/},$/{ N; s/,\n{/{/; }' test.txt

输出:

afa
asdasd
}{
sdfasd
}{

答案 1 :(得分:2)

您可以对-z使用sed选项,该选项将行除以空字符而不是换行符。如果它是一个特别大的文件,您可能希望将其与-u一起使用。

sed -z "s/},\n{/}{/g" 

答案 2 :(得分:2)

sed用于单个行上的简单替换,即全部。你要做的是跨越2行,因此不是sed的工作。只需使用awk,例如:

awk -v RS= '{gsub(/},\n{/,"}{")} 1' file

上面的内容将适用于所有UNIX系统上所有shell中的所有awks(到目前为止,你所拥有的sed解决方案只适用于某些seds,因此不可移植)。

答案 3 :(得分:1)

这可能适合你(GNU sed):

sed 'N;s/},\n\s*{/}{/;P;D' file

创建一个包含两行的移动窗口,并在适当时替换换行符。