【问题标题】:Regex replace phone numbers with XXXXXXXXXX正则表达式用 XXXXXXXXXX 替换电话号码
【发布时间】:2017-11-15 06:17:08
【问题描述】:

我有一个包含几个电话号码和其他重要数据的文本文件。我想将所有电话号码替换为预定义的文本,比如 XXXXXXXXXX。

如何使用 sed/awk 做到这一点?正则表达式

^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$

对我不起作用。

输入:

Add me 7598128789
Pls add mi 9761500634
Add 8870504046
spam post
magar maddam is not required
all hero hain
All follows

输出:

Add me XXXXXXXXXX
Pls add mi XXXXXXXXXX
Add XXXXXXXXXX
spam post
magar maddam is not required
all hero hain
All follows

【问题讨论】:

  • 如果您阅读man页面,您会发现BRE/ERE不支持\d或非贪婪或未命名的捕获组等
  • 是的,总是 10 位数字。
  • @Sundeep, \d 将是必需的参数,对吧?否则 sed 表达式不起作用。
  • 您的样本、cmets 和正则表达式都尝试过造成很多混乱......如果电话号码都是 10 位数字,为什么还需要 [-. (]\d 在某些正则表达式中是 [0-9] 的快捷方式,但在 BRE/ERE 中不起作用...

标签: regex awk sed replace


【解决方案1】:

你可以在 perl 中做类似的事情。

cat a |perl -npe 's/\d{10}/XXXXXXXXXX/g'

【讨论】:

    【解决方案2】:

    尝试:

    gawk '{gsub(/[0-9]{10}/,"XXXXXXXXXX");print}'   Input_file
    

    只需用 10 个 X 字符串替换 10 个连续数字,然后打印该行。

    【讨论】:

      【解决方案3】:

      GNU sed:

      sed -r 's/\b[0-9]{10}\b/XXXXXXXXXX/g' filename
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        • 2014-02-15
        • 2016-02-02
        • 2011-12-14
        • 2013-05-26
        相关资源
        最近更新 更多