首页 > 解决方案 > 根据条件在任何电话号码前添加“-”号

问题描述

我需要-在任何以结尾的电话号码之前添加一个标志}并将其删除}

例如,考虑这个示例文件:

*My phone number is 9999999999}<br>
Ram is calling to 88888888}<br>
653426} Rohan is trying to call 777777777*

预期输出:

*My phone number is -9999999999<br>
Ram is calling to -88888888<br>
-653426 Rohan is trying to call 777777777*

标签: bashsed

解决方案


这可以解决问题:

sed -i 's/\s\([0-9]*\)\}/ -\1/g' vv.txt

描述:

vv.txt 是您提供的样本中的文件

\s\([0-9]*\)\}: 将捕获包含在一个空间中的所有内容,并且是一个数字到 }

-\1/g:在这里,我们将在上一步中在空格\s和符号}之间捕获的所有内容替换为负号

示例文件的输出是:

*My phone number is -9999999999<br>
Ram is calling to -88888888<br>
Rohan is trying to call 777777777*

要处理评论中提到的附加条件,您可以做两件事:

1.

sed -i 's/\([0-9]*\)\}/ -\1/g' vv.txt

但这会在前面添加一个空格 - 如果该行以您所说的数字开头。

或者,如果您不想要空间。

2.

sed -i 's/\s\([0-9]*\)\}/ -\1/g;s/^\([0-9]*\)\}/-\1/g' vv.txt

推荐阅读