You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Sed与扩展正则表达式修改文本文件手机号并打印到终端

Sed处理手机号格式化方案

原命令问题

你之前执行的sed 'S/04/()/_1234_5678'无法生效,核心问题有3个:

  • sed替换指令以小写s开头,大写S不是标准替换语法
  • 替换指令的标准结构是s/匹配规则/替换结果/,你写的规则没有做通用匹配,只能硬替换固定字符串,无法适配所有10位手机号
  • 未启用扩展正则模式,无法直接通过括号做分组捕获

前置说明

你的phone.txt内所有号码均为固定10位、纯数字格式,用正则分组捕获即可快速实现两种格式化需求,执行命令时加-E参数启用扩展正则(部分老版本GNU sed可替换为-r参数)。


格式1实现:(xx)_xxxx_xxxx 样式

规则要求:前两位数字放入括号,第二位、第六位数字后加下划线,示例效果(04)_1234_5678

执行命令

sed -E 's/^([0-9]{2})([0-9]{4})([0-9]{4})$/(\1)_\2_\3/' phone.txt

实现逻辑

将整行10位数字拆为3个捕获组:

  1. 第1-2位:前2位数字
  2. 第3-6位:中间4位数字
  3. 第7-10位:最后4位数字
    替换时按格式拼接分组内容即可。

对应输出

(04)_1234_5678
(04)_9266_9266
(04)_5829_1324
(04)_2719_3732
(04)_2938_1912
(04)_3920_1291

格式2实现:+61 xxx-xxx-xxx 样式

规则要求:首位的0替换为+61 (后面带半角空格),后续数字每三位间加短横线,示例效果+61 412-435-678

执行命令

sed -E 's/^0([0-9]{3})([0-9]{3})([0-9]{3})$/\+61 \1-\2-\3/' phone.txt

实现逻辑

匹配开头的0,将剩下的9位数字拆为3个各3位的捕获组,替换时把开头的0替换为+61 ,三个分组间用短横线连接。

对应输出

+61 412-345-678
+61 492-669-266
+61 458-291-324
+61 427-193-732
+61 429-381-912
+61 439-201-291

注:命令里加了^和$锚定行首行尾,避免文件里如果存在非10位的杂项行被误替换。

内容的提问来源于stack exchange,提问作者Harry Issac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:01:00