17. 替换分组(单组)


分组可以在 sed 中使用,就像在普通正则表达式中一样。 组以"\("开始,以"\)"结束。 分组可以与反向引用结合使用。

反向引用是对通过分组选择的正则表达式的一部分进行重用。 sed 中的反向引用既可以用在正则表达式中,也可以用在替换命令的replacement-string部分中。

$ sed 's/\([^,]*\).*/\1/g' employee.txt
101
102
103
104
105 

在上面的例子中:

  • 正则表达式(\([^,]*\)匹配第一个逗号之前的字符串。
  • replacement-string中的\1替换第一个匹配的组。
  • /g是全局替代标志。

此 sed 示例仅显示/etc/passwd文件中的第一个字段,即仅显示用户名。

sed 's/\([^:]*\).*/\1/' /etc/passwd 

以下示例将每个单词中的第一个字母括在()内(如果第一个字符为大写)。

$ echo "The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'
(T)he (G)eek (S)tuff

对于下一个示例,创建如下示例文件。

1
12
123
1234
12345
123456

优化数字,即插入逗号以使它们更具可读性

$ sed 's/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g' numbers.txt
1
12
123
1,234
12,345
123,456