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