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