我在Linux中使用带有正则表达式的sed但没有得到预期的答案

时间:2014-06-21 07:24:34

标签: regex linux bash sed

我有一个文件,其内容如下所示

1234 Name Surname Address

我应该有这样的输出文件

(123) Name Surname Address

我正在使用Linux sed命令

sed -e 's/^\([0-9]\{3\}\)\./&/g' file_name

但是我的命令根本没有改变输入文件。

请帮忙,

3 个答案:

答案 0 :(得分:1)

您不需要两个捕获组,只需要一个就足够了,也不需要捕获数字后剩余的字符,

$ sed 's/\([0-9]\{3\}\)[0-9]/(\1)/g' file
(123) Name Surname Adress

通过GNU sed,

$ sed -r 's/([0-9]{3})[0-9]/(\1)/g' file
(123) Name Surname Adress

<强>解释

([0-9]{3})  # Captures first three numbers.
[0-9]       # Matches the last number.
(\1)        # In the replacement part, it replaces the four numbers by `(captured group)`

答案 1 :(得分:1)

您可以使用awk

awk '{$1="("substr($1,1,3)")"}1' file
(123) Name Surname Address

它将括号添加到字段#1的前三个字符并打印出来 它比sed:)

答案 2 :(得分:0)

您可以使用此sed

sed -e 's/^\([0-9]\{3\}\).\(.*\)/(\1)\2/g' yourfile

<强>解释

  • ^\([0-9]\{3\}\) - 前3位数(第1组)

  • . - 匹配任何一个字符

  • \(.*\) - 剩余内容(第2组)

  • (\1) - 使用\1和来访问第一个群组 在它周围加上括号。

  • \2 - 访问第二组