我在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}
,
提前致谢。
Uodated。 感谢所有人的帮助,我已经检查了它并且工作正常,但是当标签]与我的表达位于同一行时可能存在某种情况。
[{"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/]$//'
答案 0 :(得分: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
)
答案 1 :(得分:0)
根据您的输入,更安全的替代方案将是这样的:
sed '/^ *\[/,/\] *$/ { /] *$/ s//,/; }'
只有]
跟随之前的[
并且仅当它是该行的最后一个字符时才替换{{1}}。请注意,如果尖括号位于同一条线上,则无效。
答案 2 :(得分:0)
sed '$s/]$/,/'
这将仅替换最后一行(s/]$/,/
)上的替换($
)。
答案 3 :(得分:0)
您应该使用:
sed -re 's/]$/,/' textfile.txt
答案 4 :(得分:0)
sed ':a ; N ; $\! ba; s/]\([^]]*\)$/,\1/' inputFile
这会将inputFile中的最后一个'] 替换为','