在Shell/awk/sed中,除最后一个大括号外,每个大括号都加一个逗号



我想在}后面加一个逗号,除了最后一个}试过谷歌,但找不到答案。

示例如下:

{
"{#SERVICES} ,": "Directory",
"{#STATUS}": "RUNNING"
}
{
"{#SERVICES}": "krb5kdc",
"{#STATUS}": "RUNNING"
}
{
"{#SERVICES}": "kadmin",
"{#STATUS}": "RUNNING"
}
{
"{#SERVICES}": "named",
"{#STATUS}": "RUNNING"
}
{
"{#SERVICES}": "httpd",
"{#STATUS}": "RUNNING"
}

{
"{#SERVICES} ,": "Directory",
"{#STATUS}": "RUNNING"
},
{
"{#SERVICES}": "krb5kdc",
"{#STATUS}": "RUNNING"
},
{
"{#SERVICES}": "kadmin",
"{#STATUS}": "RUNNING"
},
{
"{#SERVICES}": "named",
"{#STATUS}": "RUNNING"
},
{
"{#SERVICES}": "httpd",
"{#STATUS}": "RUNNING"
}

如果你有任何问题请告诉我。

谢谢! !

Using awk:

awk -F '}n{' 'BEGIN { RS="" } { for(i=1;i<=NF;i++) { if (i==NF) { str=$i } else { str=$i"},n{" };printf "%s",str} print "n" }'

将字段分隔符设置为"}n{"记录分隔符为"然后在每个字段上循环打印字段,后面跟着"},n{"除了最后一个字段,我们只是打印字段。

GNU sed:

sed -E ':l;N;$!bl; s/}n{/},n{/g' example.txt
  • 第一个命令序列:l;N;$!bl;在模式空间中发出整行。
  • 我们只想说s/}n{/},n{/g,但左花括号要求

POSIX sed(也与bash):

sed -E ':l;N;$!bl; s/}'$'n''{/},'\$'n''{/g' example.txt
  • POSIX sed不接受表达式n,那么我们需要一次终止单引号块,将换行符作为$'n'(在bash引号的帮助下),然后重启另一个单引号块。

顺便说一句,如果perl恰好是你的选项,你可以说:

perl -0777 -pe 's/}n{/},n{/g' example.txt
  • -0777选项告诉perl首先发出所有行。

最新更新