【问题标题】:what does dash e(-e) mean in sed commands?sed 命令中的破折号 e(-e) 是什么意思?
【发布时间】:2014-05-15 22:39:31
【问题描述】:

我是 sed 新手,总是在输入文件上执行一个命令,最近我尝试使用 "-e" 处理多个命令,但我不知道它是如何工作的,默认打印很烦人,所以我无法弄清楚命令的执行顺序。

   sed -e 'command 1' -e 'command 2'  input.txt

input.txt 的内容:

line1
line2
line3

问题一:处理流程是什么?是吗

command1 processes line1 and then command2 processes new-line1(processed by cmd1)
command1 processes line2 and then command2 processes new-line2(processed by cmd1)
command1 processes line3 and then command2 processes new-line3(processed by cmd1)

command1 processes line1
command1 processes line2
command1 processes line3
command2 processes new-line1(already processed by cmd1)
command2 processes new-line2(already processed by cmd1)
command2 processes new-line3(already processed by cmd1)

问题 2: 正如我所提到的,默认打印很烦人,我应该在第一个 -e 前面使用 -n 还是在两个 -e 前面使用?

提前致谢。

编辑(似乎工作流程是第一个假设):

input.txt

1
2
3

sed -e '{s/1/ONE/;s/2/TWO/;/3/q}' -e '{s/ONE/THREE/}' numbers.txt 

THREE
TWO
3

上面的命令我试过了,好像是command1处理line1,command2处理new-line1(cmd1处理),cmd1处理下一行

【问题讨论】:

    标签: sed


    【解决方案1】:

    sed -e 命令组合起来创建一个单一的 sed 脚本。以下产生相同的结果(注意 -e 是隐含的):

    sed '
        s/1/ONE/
        s/2/TWO/
        /3/q
        s/ONE/THREE/
    ' input.txt
    

    或者作为一个班轮:

    sed 's/1/ONE/; s/2/TWO/; /3/q; s/ONE/THREE/' input.txt
    

    【讨论】:

      【解决方案2】:

      sed --help 会告诉你 -e 是什么意思:

       -e script, --expression=script
                   add the script to the commands to be executed
      

      我使用 sed 多年,99% 的时间我都使用 -e,除非我想更改文件然后我使用 -i

      问题 1:我不确定流程,但为了安全起见,我总是将其通过管道传输到另一个 sed

      例如:

      cat input.txt | sed -e 'command 1' | sed -e 'command 2'
      

      问题 2:WRT 默认打印,是的,可以组合。

      默认值:

      tiago@dell:~$ cat /etc/passwd | sed -e '/root/ !d'
      root:x:0:0:root:/root:/bin/bash
      

      安静:

      tiago@dell:~$ cat /etc/passwd | sed -ne '/root/p'
      root:x:0:0:root:/root:/bin/bash
      

      【讨论】:

      • 感谢您的回复,我在一个简单的输入文件上尝试了两个真实的命令,这是我想到的第一个流程假设,非常感谢!
      猜你喜欢
      • 2015-08-04
      • 1970-01-01
      • 2010-11-06
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 2015-09-21
      相关资源
      最近更新 更多