• 本页内容

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(标题)
注意:Sed 最多可以保存使用\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