用字符串替换一个字母

时间:2013-04-18 12:33:26

标签: regex unix sed

我在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/]$//'

5 个答案:

答案 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中的最后一个'] 替换为''