gpt4 book ai didi

sed - 在 sed 替换中添加前导 0

转载 作者:行者123 更新时间:2023-12-05 01:22:58 26 4
gpt4 key购买 nike

我有输入数据:

foo 24
foobar 5 bar
bar foo 125

我想要输出:
foo 024
foobar 005 bar
bar 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,

但是,我可以做一个替换,那样做吗?就像是:
if (one digit) then two leading 0
elif (two digits) then one leading 0

问候。

最佳答案

我怀疑“if - else”逻辑是否可以合并到一个替换命令中而不保存中间数据(例如匹配的长度)。不过,这并不意味着您不能轻松做到。例如:

$ N=5
$ sed -r ":r;s/\b[0-9]{1,$(($N-1))}\b/0&/g;tr" infile
foo 00024
foobar 00005 bar
bar foo 00125

它使用递归,在循环中比 $N 数字短的所有数字加一个零,循环结束时无法进行更多替换。 r 标签基本上表示:尝试进行替换,然后 goto r 如果找到要替换的内容。在 sed here 中查看更多关于流控制的信息。

关于sed - 在 sed 替换中添加前导 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12129382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com