多个sed vs sed使用管道(Is" sed -e cmd1 -e cmd2"与&#34相同; sed -e cmd1 | sed -e cmd2"?)

时间:2017-06-09 06:37:59

标签: sed

这两者有什么区别?

  • sed -e 'script1' -e 'script2' file
  • sed 'script1' file | sed 'script2'

我期待他们是一样的,但看起来他们不是。

以下是他们与众不同的一个例子:

$ cat test
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    11786 nick  138u  IPv6 858395      0t0  TCP localhost:46091->localhost:9092 (CLOSE_WAIT)
java    11786 nick  142u  IPv6 860196      0t0  TCP localhost:46093->localhost:9092 (CLOSE_WAIT)

$  sed 'G;G' test | sed '/^$/d'
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    11786 nick  138u  IPv6 858395      0t0  TCP localhost:46091->localhost:9092 (CLOSE_WAIT)
java    11786 nick  142u  IPv6 860196      0t0  TCP localhost:46093->localhost:9092 (CLOSE_WAIT)

$  sed -e 'G;G;' -e '/^$/d;G' test
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME



java    11786 nick  138u  IPv6 858395      0t0  TCP localhost:46091->localhost:9092 (CLOSE_WAIT)



java    11786 nick  142u  IPv6 860196      0t0  TCP localhost:46093->localhost:9092 (CLOSE_WAIT)

差异是间距。就像我说的那样,我会认为它们是相同的,是什么给出的?

1 个答案:

答案 0 :(得分:1)

sed -e script1 -e script2sed [-e] script1 | sed [-e] script2不同。见例:

[STEP 101] # printf '%s\n' 1 2 3 4
1
2
3
4
[STEP 102] # printf '%s\n' 1 2 3 4 | sed -e n -e d # delete line 2, 4, 6, ...
1
3
[STEP 103] # printf '%s\n' 1 2 3 4 | sed n | sed d
[STEP 104] #

自上次sed d删除所有内容以来,步骤103 不打印任何内容。

sed -e script1 -e script2通常与sed -e "script1<NEWLINE>script2"相同。也许你对此感到困惑?