首页 > 解决方案 > 如何使用 sed 仅查找文件的第一行和最后一行

问题描述

我有一个名为error_logapache 的文件,我想使用sed命令查看该文件的第一行和最后一行。你能帮我怎么做吗?

我知道如何使用headtail命令来做到这一点,但我很好奇它是否也可以在sed命令中使用。

我已经阅读man sed并搜索了很多,但不幸的是没有找到任何东西。

标签: sed

解决方案


这可能对您有用(GNU sed):

sed '1b;$b;d' file

所有 sed 命令都可以使用地址或正则表达式作为前缀。地址是行号或$代表最后一行的地址。如果地址或正则表达式都不存在,则以下命令适用于所有其他行。

正常的 sed 循环在模式空间中呈现每一行输入(减去其换行符)。然后应用 sed 命令,循环的最后一个动作是重新附加换行符并打印结果。

b命令控制命令流;如果它本身跳出以下 sed 命令到循环的最后一幕,即重新附加换行符并打印结果。

d命令会删除模式空间,并且由于没有要打印的内容,因此不会执行进一步的处理(包括重新附加换行符并打印结果)。

因此,上面的解决方案打印第一行和最后一行,并删除其余的。

Sed 有一些命令行选项,其中之一是模式空间结果的隐式打印-n。该p命令打印模式空间的当前状态。因此,上述解决方案的对偶是:

sed -n '1p;$p' file

注意如果输入文件只有一行,第一个解决方案将只打印一行,而第二个解决方案将打印同一行两次。此外,如果输入了多个文件,则两种解决方案都将打印第一个文件的第一行和最后一个文件的最后一行,除非该-i选项已到位,在这种情况下,每个文件都将被修改。该-s选项在不修改每个文件的情况下复制此内容,但将结果流式传输到标准输出,就好像每个文件都被单独处理一样。


推荐阅读