18. 替换分组(多组)
在多分组中,可以将多个组括在多个\(
和\)
中。
当替换正则表达式中有多个组时,可以使用\n
指定 sed replacement-string
中的第 n 个组。
一个例子如下所示。
仅获取第一列(员工 ID)和第三列(标题):
$ sed 's/\([^,]*\),\([^,]*\),\([^,]*\).*/\1,\3/g' employee.txt
101,CEO
102,IT Manager
103,Sysadmin
104,Developer
105,Sales Manager
在上面的示例中,您可以看到original-string
(reg-ex) 中提到的三个组。 这三组用,
分隔。
\([^,]*\)
是与员工 ID 匹配的组 1,
是组 1 之后的字段分隔符\([^,]*\)
是与员工姓名匹配的组 2,
是组 2 之后的字段分隔符\([^,]*\)
是与员工职务匹配的组 3/
是组 3 之后的字段分隔符, 上例的replacement-string
部分指示应如何使用这些组。\1
是打印组1(员工ID),
是在打印第1组后打印一个逗号\3
是打印组1(标题)
\1
到\9
的 9 个组的引用
将字段 1(员工 ID)与字段 2(员工姓名)交换; 打印employee.txt 文件:
$ sed 's/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1,\3/g' employee.txt
John Doe,101,CEO
Jason Smith,102,IT Manager
Raj Reddy,103,Sysadmin
Anand Ram,104,Developer
Jane Miller,105,Sales Manager