【问题标题】:Bash - Correct number in indian Phone Number formatBash - 印度电话号码格式的正确号码
【发布时间】:2019-12-12 12:46:01
【问题描述】:

我有一个 csv 第 18 列有印度电话号码。

+91 8889990098
+91 888999009
+91 88899900981
889990098
8889990098
+1 77799888999
+91 0189990098
+91 118999009
+91 44899900981

我只需要上面号码列表中正确的印度手机号码(不带 +91 且不带空格)


这就是我要走的路>>

echo '电话:+91 01234 567890' | tr -d '+91' | tr -cd '[:digit:]' > a.txt |

【问题讨论】:

  • 尝试用这个衬垫做实验:cat XXX.CSV |剪切-d';' -f18 | sed 's|+91[ ]*||g' | egrep '^[9876]{1}' ... CSV 中的分隔符在此示例中为“;”
  • @HonzaP。非常感谢您的快速回复...它在第 18 列给了我这个结果 +1 77799888999 189990098 118999009 44899900981
  • @HonzaP。我想如果命令检查我需要代码。不管数字是不是 10 位...
  • 请尝试更新您的问题。你问的问题越精确,你得到的答案就越精确......即使我的回答也很笼统,只是为了让你走上你想要的结果的轨道:-)。

标签: bash tr


【解决方案1】:

有很多方法可以解决这个问题。一种方法可能是正则表达式:

grep -Po "^(\+91[ ]*)?\K.*$" test.txt

输入:

+91 8889990098
+91888999009
+91 88899900981
889990098
8889990098
+1 77799888999
+91 0189990098
+91 118999009
+91 44899900981

输出:

8889990098
888999009
88899900981
889990098
8889990098
+1 77799888999
0189990098
118999009
44899900981

解释命令:

  • -P 启用 perl 正则表达式(比默认 grep 有更多选项)
  • -o 只在单行显示匹配的东西,而不是显示整行

  • 块 (+91)?使“+91”成为可选

  • 块 [ ]* 使任意数量的空格成为可选。它位于前一个块内,仅在出现 +91 时匹配空格。
  • \K 使前面的所有内容成为“后视”块。基本上它使以前的东西不匹配(我们不想看到)
  • .* 匹配行中的任何其他内容。您可以将其替换为 [0-9 +]+,例如,如果您的线路中还有电话号码以外的其他内容
  • ^ 表示行首,$ 表示行尾。

【讨论】:

  • 恕我直言,无需在命令中使用catgrepgrep 可以自行读取文件。
  • @RavinderSingh13 我同意。但是看例子我觉得他已经在管道输出了,因此我选择了一个例子,grep 从管道中获取输出。更改答案以反映您的评论。
  • @RavinderSingh13 大部分cmets我都看不到,是不是漏了什么?
猜你喜欢
  • 2012-03-24
  • 2022-07-06
  • 2013-08-23
  • 2016-01-12
  • 1970-01-01
  • 2014-04-01
  • 2012-08-11
  • 2012-07-16
  • 2016-05-04
相关资源
最近更新 更多