使用 sed 在前面添加零到四位数字

使用 sed 在前面添加零到四位数字

我有一个数字列表,例如

1394

49020

344

三十四

4904290

2350

5

我正在尝试使用 sed 在四位数字前面添加“0”,因此上面的示例应该给出“01394”和“02350”,而其他内容保持原样。

我使用的命令是,sed 's/[0-9]\{4\}/0&/'但这包括四位及以上的数字。我尝试包括行尾以表明我只想要四位数字,如下所示:sed 's/[0-9]\{4\}$/0&/'但这会在五位数字的第二位添加一个“0”,因此在上面的例子中,“49020”将变成“409020”。

将不胜感激任何帮助!

答案1

您希望添加至仅有的四位数字,因此需要匹配开始和结束,如下所示:

sed 's/^[0-9]\{4\}$/0&/'

我有时会使用这样的东西:

sed -r \
    -e 's/^[0-9]{1}$/0&/' \
    -e 's/^[0-9]{2}$/0&/' \
    -e 's/^[0-9]{3}$/0&/' \
    -e 's/^[0-9]{4}$/0&/' \
    -e 's/^[0-9]{5}$/0&/' \
    -e 's/^[0-9]{6}$/0&/'

这应该会将所有数字保留为七位数字。当然,使用其他工具也可以找到比 更简单的方法sed

答案2

我发现 sed 有点古怪。sed 哈哈,下面是操作方法。而不是

 sed 's/[0-9]\{4\}/0&/'

添加字符串终止符:

 sed 's/^[0-9]\{4\}\>/0&/'

注意第二个括号后的 />。= 单词结束。这很愚蠢,不知道为什么指定 len 不起作用。也许一些专家可以告诉我们为什么会这样。

顺便说一句,尝试使用和不使用字符串起始插入符号 - 它无论以哪种方式都可以工作 s/[0-9 或 s/^[0-9]

答案3

这对我有用。

sed 's/^[0-9]\{4\}$/0&/'

我能够使用 -i 命令和空格 /filename 来修改它。如下所示。

sed -i 's/^[0-9]\{4\}$/0&/' /tmp/filename

它会在文件中的 4 位数字前面加上 0。

然后我对其进行了修改,以完成我需要的其他有趣的更改。

非常感谢这个!

相关内容