gpt4 book ai didi

bash - 从 40900000 拆分为 409-00-000

转载 作者:行者123 更新时间:2023-11-29 09:34:46 25 4
gpt4 key购买 nike

有没有人知道使用单个命令、sed 或 awk 将“40900000”转换为“409-00-000”的方法。我已经用 sed 尝试了几种方法,但一点运气都没有。我需要批量执行此操作,大约有 40k 行,其中一些行不正确,因此需要修复它们。

提前致谢

最佳答案

使用 GNU sed,我会这样做:

sed -r 's/([0-9]{3})([0-9]{2})([0-9]{3})/\1-\2-\3/' filename
# or, equivalently
sed -E 's/([0-9]{3})([0-9]{2})([0-9]{3})/\1-\2-\3/' filename
  • -r-E 启用扩展正则表达式模式,这避免了转义所有括号的需要
  • \1 是第一个捕获组(( ) 之间的位)
  • [0-9]表示0到9的范围
  • {3} 表示前面的字符或范围的三个

编辑:感谢所有评论。

在其他缺少 -r 开关或其别名 -E 的系统上,您必须转义 ( ){ } 上面。剩下的就是:

sed 's/\([0-9]\{3\}\)\([0-9]\{2\}\)\([0-9]\{3\}\)/\1-\2-\3/' filename

以重复为代价,您可以通过简单地重复 [0-9] 来避免一些转义:

sed 's/\([0-9][0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9][0-9]\)/\1-\2-\3/' filename

郑重声明,Perl 同样有能力做这类事情:

perl -pwe 's/(\d{3})(\d{2})(\d{3})/$1-$2-$3/' filename
  • -p 表示打印
  • -w 表示启用警告
  • -e表示执行一行
  • \d 是“数字”字符类(零到九)

关于bash - 从 40900000 拆分为 409-00-000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378009/

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