0

我在 unix 上有一些文本文件:

[{"creation_time":"2013-04-18 12:03:33","id":255,"type_id":100,"workflow":167000440},
{"creation_time":"2013-04-18 12:03:33","id":255,"type_id":100,"workflow":167000441}
]

我需要使用 SED 工具编写正则表达式,找到最后一个符号 ] 并将其替换为 ,因此最终结果将是:

[{"creation_time":"2013-04-18 12:03:33","id":255,"type_id":100,"workflow":167000440},
{"creation_time":"2013-04-18 12:03:33","id":255,"type_id":100,"workflow":167000441}
,

提前致谢。

已过期。谢谢大家的帮助,我已经检查过了,它工作正常,但是当 tag ] 与我的表达式位于同一行时,可能会出现一些情况。

[{"creation_time":"2013-04-18 12:03:33","id":255,"type_id":100,"workflow":167000440},
{"creation_time":"2013-04-18 12:03:33","id":255,"type_id":100,"workflow":167000441}]

复制自评论

我已经写了这个正则表达式,但它不起作用sed -i '$s/]$//'

4

5 回答 5

0
sed 's/]$/,/'

应该成功。

$我们表示行尾。

测试

$ echo "[{"creati]on_time":"2013-04-18 12:03:33","id":255,"type_id":100,"workflow":167000440},
{"creation_time":"2013-04-18 12:03:33","id":255,"type_id":100,"workflow":167000441}
]" | sed 's/]$/,/'
[{creati]on_time:2013-04-18 12:03:33,id:255,type_id:100,workflow:167000440},
{creation_time:2013-04-18 12:03:33,id:255,type_id:100,workflow:167000441}
,

我们可以看到,如果我们把其他]他们坚持下去。(在creati]on_time

于 2013-04-18T12:36:26.813 回答
0

根据您的输入,一个更安全的选择是这样的:

sed '/^ *\[/,/\] *$/ { /] *$/ s//,/; }'

解释

]仅当它跟在前一个字符之后[且仅当它是该行的最后一个字符时才替换它。请注意,如果尖括号在同一行,这将不起作用。

于 2013-04-18T12:38:24.003 回答
0
sed '$s/]$/,/'

这将仅s/]$/,/在最后一行 ( ) 上进行替换 ( ) $

于 2013-04-18T12:38:33.740 回答
0

你应该使用:

sed -re 's/]$/,/' textfile.txt
于 2013-04-18T12:39:19.083 回答
0
sed ':a ; N ; $\! ba; s/]\([^]]*\)$/,\1/' inputFile

这会将inputFile 中的最后一个 ' ] ' 替换为 ' , '

于 2013-04-18T12:49:13.617 回答