【问题标题】:Add a comma to every curly bracket except the last curly bracket in Shell/awk/sed在 Shell/awk/sed 中除最后一个大括号外的每个大括号都添加一个逗号
【发布时间】:2021-01-28 20:23:06
【问题描述】:

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

示例如下:

来自

{
  "{#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"
}

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

谢谢!!

【问题讨论】:

  • 请在您的问题中以代码的形式添加您的努力,这是非常鼓励的,谢谢。
  • @stduong2210 :使用可以进行多行搜索和替换的文本编辑器(或sed 之类的工具)并将每个}\n{ 替换为},\n{

标签: shell awk sed


【解决方案1】:

使用 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{”,除了我们简单打印字段的最后一个字段.

【讨论】:

  • 没问题。如果解决方案满足您的要求,请花点时间投票并接受答案。
【解决方案2】:

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 首先 slurp 所有行。

【讨论】:

  • 感谢您的回复信息。如果您对任何答案(Raman Sailopal 的或我的)感到满意,请您通过单击答案旁边的复选标记来接受一个吗? BR。
猜你喜欢
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 2012-09-11
  • 2012-11-15
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
相关资源
最近更新 更多