我在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'
这将按照sed进行拆分。但是现在我需要确保仅在每10个字符后找到逗号字符之后才进行拆分...,以便输出应该有有意义的行.. 输出应该是..
k1:v1,k2:v2,
.....
整个想法不是在两者之间断线
谢谢
答案 0 :(得分:5)
您可以使用
sed -r 's/.{10}[^,]*,/&\n/g'
请参见sed
demo online。
.{10}[^,]*,
模式匹配
.{10}
-任意10个字符[^,]*
-除,
之外的0个或更多字符,
-逗号。 &\n
替换模式将替换为整个匹配项(&
),并在其后添加换行符。
答案 1 :(得分:2)
如果实际上您只是想在每个第二个逗号后添加换行符,那么GNU sed和其他一些sed中就是这样:
$ echo "$v" | sed 's/,[^,]*,/&\n/g'
k1:v1,k2:v2,
k3:v3,k4:v4,
k5:v5,k6:v6,
k7:v7,k8:v8
或这样做是为了在所有shell中跨所有sed进行移植:
sed 's/,[^,]*,/&\
/g'
或使用任何awk进行此操作:
awk '{gsub(/,[^,]*,/,"&\n")}1'
答案 2 :(得分:0)
对不起,感谢您的反馈,这是预期的输出-
{k1:v1,k2:v2,
k3:v3,k4:v4,
k5:v5,k6:v6,
k7:v7,k8:v8}
规则应先查找10个字符,然后查找第一个逗号,然后在该模式后添加新行。 Wiktor代码段实际上是这样做的。但是,我很高兴看到以其他方式实现这一目标。谢谢大家。