我有一个数字列表,例如
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。
然后我对其进行了修改,以完成我需要的其他有趣的更改。
非常感谢这个!