我有一个目录,里面有数百个电话号码,格式为“xx.xx.xx.xx.xx”。其中“x”是从 0 到 9 的数字。2 个数字的组由一个点分隔。我正在寻找一个正则表达式,它可以将最后 9 个数字整合在一起,语法如下
<a href="tel:+33XXXXXXXXX">xx.xx.xx.xx.xx</a>
法国国际分机号(+33)取代了始终以 0 开头的第一个数字。如果可能的话,我想保留标签之间的原始格式。
答案1
测试:
$ 回显“01.23.45.67.89” \ | sed -re 's,^([0-9])([0-9])\.([0-9]{2})\.([0-9]{2})\.([0-9]{2})\.([0-9]{2})$,<a href="tel:+33\2\3\4\5\6">\1\2.\3.\4.\5.\6</a>,' <a href="电话:+33123456789">01.23.45.67.89</a>
实际使用中:用一个文件,每行一个“xx.xx.xx.xx.xx”
$ cat 电话号码.txt \ | sed -re 's,^([0-9])([0-9])\.([0-9]{2})\.([0-9]{2})\.([0-9]{2})\.([0-9]{2})$,<a href="tel:+33\2\3\4\5\6">\1\2.\3.\4.\5.\6</a>,' <a href="电话:+33123456789">01.23.45.67.89</a>
后者未经测试。
答案2
如果您选择 Notepad++,则可以执行以下操作:
(请注意,可以在许多工具中使用):
- Ctrl+H
- 找什么:
^(\d)(\d)\.(\d\d)\.(\d\d)\.(\d\d)\.(\d\d)$
- 用。。。来代替:
<a href="33$2$3$4$5$6">$0</a>
- 查看 环绕
- 查看 正则表达式
- Replace all
解释:
^ # beginning of line
(\d) # group 1, first digit (zero)
(\d) # group 2, second digit (area code)
\. # a dot
(\d\d) # group 3, 2 digits
\. # a dot
(\d\d) # group 4, 2 digits
\. # a dot
(\d\d) # group 5, 2 digits
\. # a dot
(\d\d) # group 6, 2 digits
$ # end of line
替代品:
<a href=" # literally
33 # 33
$2 # content of group 2, the second digit (area code)
$3 # content of group 3
$4 # content of group 4
$5 # content of group 5
$6 # content of group 6
"> # literally
$0 # content of group 0, the whole match
</a> # end tag
截图(之前):
截图(之后):
答案3
OSX 终端返回以下错误。
上次登录:2011 年 4 月 21 日星期二 16:07:46,登录于 ttys000 pc9:~ MY-USERNAME$ cd ~/Downloads/sample_dir/tel.html -bash: cd: /Users/MY-USERNAME/Downloads/sample_dir/tel.html: 不是目录 pc9:~ MY-USERNAME$ $ echo "01.23.45.67.89" \
| sed -re 's,^([0-9])([0-9]).([0-9]{2}).([0-9]{2}).([0-9]{2}).([0-9]{2})$,\1\2.\3.\4.\5.\6,' -bash: $: 未找到命令 sed: 非法选项 -- r 用法:sed 脚本 [-Ealn] [-i 扩展名] [文件 ...] sed [-Ealn] [-i 扩展名] [-e 脚本] ... [-f 脚本文件] ... [文件 ...] pc9:~ MY-USERNAME$ 01.23.45.67.89 -bash: 意外标记“换行符”附近出现语法错误