繁体   English   中英

每个匹配的模式后,Sed / AWK搜索/替换字符串

[英]Sed/AWK search/replace string after every matched pattern

我有像json这样的变量数据 -

v={k1:v1,k2:v2,k3:v3,k4:v4,k5:v5,k6:v6,k7:v7,k8:v8}; 

其中键和值可以是任何值。 我需要在每10个字符之后将它分成多行...我做了

echo "${v}" | sed -r 's/.{10}/&\n/g'

这按照本身进行拆分。 但是现在我需要确保只有在每10个字符后找到逗号字符后才能进行拆分...因此输出应该有有意义的行..输出应该是..

k1:v1,k2:v2,
.....

整个想法不是介于两者之间的断裂线

谢谢

你可以用

sed -r 's/.{10}[^,]*,/&\n/g'

在线查看sed演示

.{10}[^,]*,模式匹配

  • .{10} - 任何10个字符
  • [^,]* - 除0之外的0个或更多个字符,
  • , - 一个逗号。

&\\n替换模式替换整个匹配( & )并为其添加换行符。

如果实际上你只是想在每个第二个逗号之后添加一个换行符,那么这就是GNU sed和其他一些seds:

$ echo "$v" | sed 's/,[^,]*,/&\n/g'
k1:v1,k2:v2,
k3:v3,k4:v4,
k5:v5,k6:v6,
k7:v7,k8:v8

或者这是所有shell中所有seds的可移植性:

sed 's/,[^,]*,/&\
/g'

或者使用任何awk:

awk '{gsub(/,[^,]*,/,"&\n")}1'

对不起,感谢您在这里反馈预期输出 -

{k1:v1,k2:v2,
k3:v3,k4:v4,
k5:v5,k6:v6,
k7:v7,k8:v8}

当发现在该模式之后添加新行时,规则应该查找前10个字符,然后是第一个逗号。 Wiktor代码snippt实际上做到了这一点。 但是,我很高兴看到以其他方式实现这一目标。 谢谢大家。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM