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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用sed替换换行符分隔的花括号相关的知识,希望对你有一定的参考价值。

我需要更换它

    },   <-here there is a 

    {

}{

没关系 n

我试过这个:

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

但不起作用。

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

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

答案

sed解决方案:

示例test.txt文件:

afa
asdasd
},
{
sdfasd
},
{

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

输出:

afa
asdasd
}{
sdfasd
}{
另一答案

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

sed -z "s/},
{/}{/g" 
另一答案

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

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

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

另一答案

这可能适合你(GNU sed):

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

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

以上是关于用sed替换换行符分隔的花括号的主要内容,如果未能解决你的问题,请参考以下文章

如何注入换行符以替换分隔符

用 JSX 中的 HTML 跨度节点替换字符串中的花括号

sed高级命令

使用 tr 用空格替换换行符[重复]

用sed 怎么替换包含换行符\n的文本.比如这些

如何在bash中将空格替换为新行[重复]