linux - 如何从匹配行之后删除文件中的所有行?

标签 linux bash sed

我有一个由多行文本组成的文件:

The first line
The second line
The third line
The fourth line

我有一个字符串,它是以下行之一:第二行

我想删除文件中的字符串及其后面的所有行,所以除了字符串之外,它还会删除第三行第四行。该文件将变为:

The first line

我在google上搜索过解决方案,看来我应该使用sed。比如:

sed 'linenum,$d' file

但是如何找到字符串的行号呢?或者,我应该怎么做?

最佳答案

如果您不想打印匹配的行(或任何后续行):

sed -n '/The second line/q;p' inputfile

这表示“当您到达与模式匹配的行时退出,否则打印每一行”。 -n 选项可防止隐式打印,并且需要 p 命令来显式打印行。

sed '/The second line/,$d' inputfile

这表示“从输出中删除从匹配行开始一直到文件末尾的所有行”。

但第一个更快。但是,它将完全退出处理,因此如果您有多个文件作为参数,则不会处理第一个匹配文件之后的文件。在这种情况下,删除形式更好。

如果您确实想打印匹配的行,但不打印以下任何行:

sed '/The second line/q' inputfile

这表示“打印所有行并在到达匹配行时退出”(未使用 -n 选项(无隐式打印)。

man sed了解更多信息。

关于linux - 如何从匹配行之后删除文件中的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227295/

相关文章:

linux - bash - 如何将换行符传递给脚本?

bash - Anaconda 环境 bash 前缀太长

linux - 使用脚本检查我的主目录中大于或等于 1KB 的常规文件的大小

bash - 使用 unix awk/sed/grep 从文本文件中删除完整的 url

Python 子进程不支持复杂的 Linux 命令

linux - Snort 和 Iptables 与 Linux 内核的交互

linux - 全局可写文件的风险

c++ X11全局改变光标形状

linux - 复杂的 bash 管道在跳跃中工作

shell - 想从文件中删除第 i 个匹配模式