这两者有什么区别呢?
sed -e 'script1' -e 'script2' filesed '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)差别是间距。就像我说的,我会认为他们是一样的,是什么原因?
发布于 2017-06-09 08:16:50
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] #步骤103不打印任何内容,因为上一次sed d将删除所有内容。
sed -e script1 -e script2通常与sed -e "script1<NEWLINE>script2"相同。也许你跟这事搞混了?
https://stackoverflow.com/questions/44450921
复制相似问题