• 本页内容

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 执行流程。

  1. 读取:在此阶段,Sed 读取该行并将其放入模式空间中。 那么,下面就是模式空间的内容了。

    104,Anand Ram,Developer
    

  2. 执行:Sed 在模式空间(即s/Developer/IT Manager/)上执行第一个 sed 命令。 因此,在该命令之后,以下是模式空间的内容。

    104,Anand Ram,IT Manager
    
    现在,sed 在模式空间(即s/Manager/Director/)上执行第二个 sed 命令。 在该命令之后,以下是模式空间的内容。
    104,Anand Ram,IT Director
    
    注意:请记住:sed 在执行第一个命令后对当前模式空间的内容执行第二个命令。

  3. 打印:它打印当前模式空间的内容,如下所示。

    104,Anand Ram,IT Director
    

  4. 重复:它移至下一行并从步骤 #1 开始重复。