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

标签 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 命令,我想确认一下。

最佳答案

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

我通过运行 yes 几秒钟然后按 Ctrl-C 创建了一个包含多行的文件 (203118592):

$ yes > file

这会创建一个巨大的文件,其中包含一堆带有“y”的行。然后我运行了您的 sed 命令以将“y”替换为“n”(而不是将“foo”替换为“bar”),这花了相当长的时间:

$ 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

关于unix - sed -n '1s/pattern/substitute/p' 是解析整个文件还是在第 1 行后退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9790895/

相关文章:

c++ - unix 套接字与共享内存消息哪个更快

unix - 如何从 svn 存储库下载对象到 unix AIX

linux - 错误 "extra characters at the end of g command"

unix - 如何删除文件名单词前的数字

javascript - 使用 jscript 检测操作系统

c - 如何在 Linux 上构建信号名称数组?

linux - 如何使用 awk 工具对齐 csv 文件中的列

linux - 当从 cron 调用脚本时,脚本中的 Sed 命令不起作用

sed - 收集文件开头的数字

unix - 在 Mathematica 后台运行程序