这两者有什么区别?
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)
差异是间距。就像我说的那样,我会认为它们是相同的,是什么给出的?
答案 0 :(得分:1)
sed -e script1 -e script2
与sed [-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"
相同。也许你对此感到困惑?