15. 影响同一行的多个替换命令
正如我们前面讨论的,sed 执行流程是 读取、执行、打印、重复。 执行部分可能由多个 sed 命令组成,sed 将一一执行。
例如,如果您有两个 sed 命令,则 sed 将在模式空间上执行command-1,然后在模式空间上执行command-2。
如果command-1更改了模式空间中的某些内容,则command-2将在新更改的模式空间(而不是读取的原始行)上执行。
以下示例演示了在模式空间上执行两个 sed 替换命令。
将 "Developer" 更改为 "IT Manager",然后修改 "Manager" 为 "Director":
$ sed '{
s/Developer/IT Manager/
s/Manager/Director/
}' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Director
103,Raj Reddy,Sysadmin
104,Anand Ram,IT Director
105,Jane Miller,Sales Director
让我们分析一下示例中第 4 行的 sed 执行流程。
-
读取:在此阶段,Sed 读取该行并将其放入模式空间中。 那么,下面就是模式空间的内容了。
104,Anand Ram,Developer
-
执行:Sed 在模式空间(即
s/Developer/IT Manager/)上执行第一个 sed 命令。 因此,在该命令之后,以下是模式空间的内容。 现在,sed 在模式空间(即104,Anand Ram,IT Manager
s/Manager/Director/)上执行第二个 sed 命令。 在该命令之后,以下是模式空间的内容。104,Anand Ram,IT Director
注意:请记住: sed在执行第一个命令后对当前模式空间的内容执行第二个命令。 -
打印:它打印当前模式空间的内容,如下所示。
104,Anand Ram,IT Director
-
重复:它移至下一行并从步骤
#1开始重复。