仅保留匹配模式的第一行

时间:2019-01-31 21:53:58

标签: bash sed cat

有人知道我如何在文件中搜索字符串,然后删除除第一个出现该模式的行以外的所有行吗?

例如,来自

sheep
cow
pig
pig
goat

pig

其中pig是具有该模式的第一行。

我知道如何删除不包含模式的行:

sed -i -e '/PATTERN/!d' file

不过,不知道如何只保留第一次出现。

1 个答案:

答案 0 :(得分:2)

您可以在第一场比赛后告诉sed到quit

sed -i '/pig/!d;q' infile

之所以起作用,是因为当点击d时,其余命令将被忽略,因此q仅在第一个匹配项之后执行。

或者您可以使用grep的-m选项(适用于GNU和BSD grep,但POSIX不需要):

grep -m1 'pig' infile > infile.tmp && mv infile.tmp infile