$ cat rgb
lower (#1): "red green blue"
UPPER (#2): "RED GREEN BLUE"
$ sed '/#/ {s//=/; :k n; bk}' rgb
lower (=1): "red green blue"
UPPER (#2): "RED GREEN BLUE"
我知道sed
如果没有任何下一行要附加,则在没有自动打印的情况下退出。但是在这个例子中sed
打印了最后一行。它是如何工作的?
$ cat rgb
lower (#1): "red green blue"
UPPER (#2): "RED GREEN BLUE"
$ sed '/#/ {s//=/; :k n; bk}' rgb
lower (=1): "red green blue"
UPPER (#2): "RED GREEN BLUE"
我知道sed
如果没有任何下一行要附加,则在没有自动打印的情况下退出。但是在这个例子中sed
打印了最后一行。它是如何工作的?
该
-n
选项禁用自动打印。您将第一行中的
#
替换为(模式空间)。然后由于没有选项,图案空间被打印出来。然后模式空间被下一行替换,然后我们循环到,这导致模式空间被打印,因为自动打印没有被禁用,然后没有更多的输入行退出。=
#
n
-n
n
sed
如果您使用
-n
并将 a 添加p
到循环中,可能会更清楚:之后
n
,p
强制打印除第一行之外的所有内容。before
n
,p
每次都强制打印图案空间。n
从不打印任何东西,因为自动打印被禁用。尝试使用循环中不同位置
-n
的命令删除选项。p
如果您只想在更改后打印一行,您可以使用
q
: