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

Bash 用sed替换换行符分隔的花括号,bash,sed,Bash,Sed,我需要更换这个 }, <-here there is a \n { 这不重要\n 我试过这个: sed "s/},\n{/}{/g" 但是不起作用 我尝试过其他奇怪的解决方案,但效果不太好,因为文件中有许多其他行以{开头 您能推荐一些解决方案吗?sed解决方案: 示例test.txt文件: afa asdasd }, { sdfasd }, { 输出: afa asdasd }{ sdfasd }{ 您可以为sed使用-z选项,该选项通过空字符而不是换行符分

我需要更换这个

    },   <-here there is a \n
    {
这不重要\n

我试过这个:

sed "s/},\n{/}{/g" 
但是不起作用

我尝试过其他奇怪的解决方案,但效果不太好,因为文件中有许多其他行以
{
开头


您能推荐一些解决方案吗?

sed
解决方案:

示例
test.txt
文件:

afa
asdasd
},
{
sdfasd
},
{

输出:

afa
asdasd
}{
sdfasd
}{

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

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

sed是针对单个行的简单替代,仅此而已。您尝试执行的操作跨越两行,因此不是sed的工作。只需使用awk,例如:

awk -v RS= '{gsub(/},\n{/,"}{")} 1' file
以上内容将可移植到所有UNIX系统上所有Shell中的所有AWK中(到目前为止,您拥有的sed解决方案仅适用于某些sed,因此不可移植)。

这可能适用于您(GNU sed):


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

这很有趣,但也会删除文件中的所有空行。@TimMalone,正如OP在问题中所说的那样—“与此无关\n”。如果您有一个类似于此处的问题,但有保留空行的要求,请发布一个新问题。
sed -z "s/},\n{/}{/g" 
awk -v RS= '{gsub(/},\n{/,"}{")} 1' file
sed 'N;s/},\n\s*{/}{/;P;D' file