将字符串中的最后一个数值括在括号中

use*_*800 3 sed text-processing

我有一个文本文件,其中包含诸如POP9, POP10- 一般情况下的单词实例。同一文件还具有单词实例,例如, , ie `.POPnumberPOP(1)POP(2)POP(number)

我正在寻找一种方法将所有实例转换为并让现有实例保持不变。我可以通过什么方式实现它?POPnumberPOP(number)POP(number)sed

Sté*_*las 6

sed 's/\(POP\)\([0123456789]\{1,\}\)/\1(\2)/g' < input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

其中\(...\)用于捕获\1匹配的内容,以便它们可以在,中的替换中使用\2[0123456789]匹配集合中的任何单个字符,并\{1,\}匹配前面的一个或多个字符,此处为数字。

如果您sed支持-E扩展则表达式,您可以使用以下方法缩短它(并使其更易于阅读):

sed -E 's/(POP)([0123456789]+)/\1(\2)/g' < input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

  • 不使用“[0-9]”的原因是什么?是否存在与“[0123456789]”不同的区域? (3认同)
  • @Philippos,是的,`[0-9]`通常匹配数百个恰好在0到9之间排序的字符,如果您只想要`0123456789`,`[0123456789]`是最安全的,甚至`[[: digital:]]` 保证仅匹配这些数字。您会在这里找到几个涉及该问题的问答。 (2认同)