foo 24foobar 5 barbar foo 125
我想要输出:
foo 024foobar 005 barbar foo 125
所以我可以使用这个sed替换:
s,\([a-z ]\+\)\([0-9]\)\([a-z ]*\),0,s,\([a-z ]\+\)\([0-9][0-9]\)\([a-z ]*\),,
但是,我可以进行一次替换吗?就像是:
if (one digit) then two leading 0elif (two digits) then one leading 0
问候.
解决方法 我怀疑“if – else”逻辑可以合并到一个替换命令中而不保存中间数据(例如匹配的长度).但这并不意味着你不能轻易做到.例如:$N=5$sed -r ":r;s/\b[0-9]{1,$(($N-1))}\b/0&/g;tr" infilefoo 00024foobar 00005 barbar foo 00125
它使用递归,在循环中为$N个数字短的所有数字添加一个零,当不再进行替换时结束. r标签基本上说:尝试做替换,然后转到r如果找到替代的东西.请参阅sed here中有关流量控制的更多信息.
总结以上是内存溢出为你收集整理的在sed替换中添加前导0全部内容,希望文章能够帮你解决在sed替换中添加前导0所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)