sed -n'1s / pattern / substitute / p'解析整个文件还是在第1行之后退出?

时间:2012-03-20 16:30:31

标签: unix sed

sed以1行地址(第1行)执行并在其上进行替换时,例如:

$ sed -n '1s/foo/bar/p' <<EOF
foo will be replaced, this is line 1
are these lines still processed?
Hard to check.
EOF

sed是继续读取/解析文件的其余部分还是在命名地址后退出?我在一个非常快的系统上,时间似乎停止了,但没有给出q命令,想要确定。

1 个答案:

答案 0 :(得分:4)

不,它绝对不会停留在我的sed版本(GNU sed版本4.2.1)上。

我创建了一个包含多行(203118592)的文件,运行yes几秒钟然后点击 Ctrl-C

$ yes > file

这会创建一个包含“y”的大量行的巨大文件。然后我运行你的sed命令用“n”代替“y”(用“bar”代替“foo”),花了很长时间:

$ wc -l file
203118592 file
$ time sed -n '1s/y/n/p' file
n

real    0m9.335s
user    0m9.237s
sys     0m0.068s

您刚刚没有创建足够大的文件来查看效果。 :)

另外,仅供参考,如果我使用q,则会按预期退出:

$ time sed -n '1s/y/n/p ;q' file
n

real    0m0.002s
user    0m0.000s
sys     0m0.000s