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

问题描述 投票:3回答:4

我需要更换它

    },   <-here there is a \n
    {

}{

没关系\ n

我试过这个:

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

但不起作用。

我尝试过其他奇怪的解决方案,但不能正常工作,因为在文件中有很多其他行以{开头。

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

bash sed
4个回答
3
投票

sed解决方案:

示例test.txt文件:

afa
asdasd
},
{
sdfasd
},
{

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

输出:

afa
asdasd
}{
sdfasd
}{

2
投票

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

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

2
投票

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

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

以上所有UNIX系统中所有shell中的所有awk都可以移植(到目前为止你使用的sed解决方案只适用于某些种子,因此不可移植)。


1
投票

这可能适合你(GNU sed):

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

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

© www.soinside.com 2019 - 2024. All rights reserved.