有没有人知道用单个命令,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
Run Code Online (Sandbox Code Playgroud)
-r或-E能够扩展的正则表达式模式,它避免了需要逃避所有的括号\1是第一个捕获组(位于其间的位( ))[0-9] 表示从零到九的范围{3} 表示前面的字符或范围中的三个编辑:感谢您的所有评论.
在缺乏其他系统-r开关,或它的别名-E,你必须躲避( )和{ }上面.这让你:
sed 's/\([0-9]\{3\}\)\([0-9]\{2\}\)\([0-9]\{3\}\)/\1-\2-\3/' filename
Run Code Online (Sandbox Code Playgroud)
以重复为代价,您可以通过简单地重复以下内容来避免一些逃脱[0-9]:
sed 's/\([0-9][0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9][0-9]\)/\1-\2-\3/' filename
Run Code Online (Sandbox Code Playgroud)
为了记录,Perl同样能够做到这一点:
perl -pwe 's/(\d{3})(\d{2})(\d{3})/$1-$2-$3/' filename
Run Code Online (Sandbox Code Playgroud)
-p 意思是打印-w 意味着启用警告-e 意味着执行一行\d 是"数字"字符类(从零到九)| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |