sed - 如何使用 sed 仅查找文件的第一行和最后一行
问题描述
我有一个名为error_log
apache 的文件,我想使用sed
命令查看该文件的第一行和最后一行。你能帮我怎么做吗?
我知道如何使用head
和tail
命令来做到这一点,但我很好奇它是否也可以在sed
命令中使用。
我已经阅读man sed
并搜索了很多,但不幸的是没有找到任何东西。
解决方案
这可能对您有用(GNU sed):
sed '1b;$b;d' file
所有 sed 命令都可以使用地址或正则表达式作为前缀。地址是行号或$
代表最后一行的地址。如果地址或正则表达式都不存在,则以下命令适用于所有其他行。
正常的 sed 循环在模式空间中呈现每一行输入(减去其换行符)。然后应用 sed 命令,循环的最后一个动作是重新附加换行符并打印结果。
b
命令控制命令流;如果它本身跳出以下 sed 命令到循环的最后一幕,即重新附加换行符并打印结果。
该d
命令会删除模式空间,并且由于没有要打印的内容,因此不会执行进一步的处理(包括重新附加换行符并打印结果)。
因此,上面的解决方案打印第一行和最后一行,并删除其余的。
Sed 有一些命令行选项,其中之一是模式空间结果的隐式打印-n
。该p
命令打印模式空间的当前状态。因此,上述解决方案的对偶是:
sed -n '1p;$p' file
注意如果输入文件只有一行,第一个解决方案将只打印一行,而第二个解决方案将打印同一行两次。此外,如果输入了多个文件,则两种解决方案都将打印第一个文件的第一行和最后一个文件的最后一行,除非该-i
选项已到位,在这种情况下,每个文件都将被修改。该-s
选项在不修改每个文件的情况下复制此内容,但将结果流式传输到标准输出,就好像每个文件都被单独处理一样。
推荐阅读
- javascript - 如何检测某个标签是否被悬停
- java - 从工作 Talend 中的网页中提取数据/使用 java 从 UI 配置工作 talend
- stripe-payments - 使用条带向连接的帐户收费
- java - 数组中有字符串和整数的二维冒泡排序java程序
- android-studio - 运行“应用程序”时出错:未找到默认活动(Android Studio)
- reactjs - 如何获取 React Native 镜像失败错误码
- r - 计算字符串序列的平均值,删除任何 1SD 或更大的值,然后用平均值替换删除的值
- php - 带有 PHP 错误和存储过程的 sqlsrv_execute 错误
- excel - MergeWorkbooks - 在第 21 个单元格中找到的值
- regex - sed/grep - 显示第 1 列和第 5 列,删除第 5 列中的逗号并交换 Last-First,并在 /etc/passwd 中按姓氏字母顺序排序