标签: bash sed cat
有人知道我如何在文件中搜索字符串,然后删除除第一个出现该模式的行以外的所有行吗?
例如,来自
sheep cow pig pig goat
到
pig
其中pig是具有该模式的第一行。
我知道如何删除不包含模式的行:
sed -i -e '/PATTERN/!d' file
不过,不知道如何只保留第一次出现。
答案 0 :(得分:2)
您可以在第一场比赛后告诉sed到quit:
sed -i '/pig/!d;q' infile
之所以起作用,是因为当点击d时,其余命令将被忽略,因此q仅在第一个匹配项之后执行。
d
q
或者您可以使用grep的-m选项(适用于GNU和BSD grep,但POSIX不需要):
-m
grep -m1 'pig' infile > infile.tmp && mv infile.tmp infile