在sed替换中添加前导0

在sed替换中添加前导0,第1张

概述我有输入数据: foo 24foobar 5 barbar foo 125 我想要输出: foo 024foobar 005 barbar foo 125 所以我可以使用这个sed替换: s,\([a-z ]\+\)\([0-9]\)\([a-z ]*\),\100\2\3,s,\([a-z ]\+\)\([0-9][0-9]\)\([a-z ]*\),\10\2\3, 但是,我可以进行 我有输入数据:

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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1018764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存