Joh*_*ohn 3 command-line bash sed
我需要在文本文件中格式化电话号码。它们显示为(示例)8014516912
我将如何格式化它以便我可以-在前 3 个数字之后插入一个,然后-在另外 3 个数字之后插入一个,所以它会显示为801-451-6912
我将如何对包含电话号码的所有行执行此操作?请记住,电话号码位于文本之间,因此这些号码并不总是位于同一索引处。例如它可以是这样的:
atewfnwieug 8204919561
adw 8915617141
Run Code Online (Sandbox Code Playgroud)
    为此,您需要数字量词:
sed -r 's/\b([0-9]{3})([0-9]{3})([0-9]{4})\b/\1-\2-\3/' your_file
Run Code Online (Sandbox Code Playgroud)
-r启用扩展正则表达式的开关不是 POSIX,因此更便携的解决方案是
perl -pe 's/\b([0-9]{3})([0-9]{3})([0-9]{4})\b/$1-$2-$3/' your_file
Run Code Online (Sandbox Code Playgroud)
在扩展的正则表达式中,量词{n,m}意味着至少匹配前一个原子n,最多匹配一次m。例如,量词?可以表示为{0,1}。省略m表示没有上限:+可以写成{1,}. 最后,{n}意思是精确匹配前一个原子的n时间。
如果你想使用sed,你不需要为此扩展正则表达式;只是基本的正则表达式形式可读性较差:
sed 's/\b\([0-9]\{3\}\)\([0-9]\{3\}\)\([0-9]\{4\}\)\b/\1-\2-\3/' your_file
Run Code Online (Sandbox Code Playgroud)