删除除匹配模式行最佳实践(sed)之外的所有行

时间:2011-05-07 17:09:15

标签: unix sed

我想删除除包含匹配模式的行之外的所有行。

我就这样做了:

sed -n 's/matchingpattern/matchingpattern/p' file.txt

但我只是好奇,因为我将匹配模式重命名为匹配模式本身。看起来像是浪费。

有更好的方法吗?

4 个答案:

答案 0 :(得分:48)

sed '/pattern/!d' file.txt

但你在这里重新发明grep

答案 1 :(得分:2)

这可能对您有用:

sed -n '/matchingpattern/p' file.txt

/.../是一个地址,可能会在这种情况下附加操作p

答案 2 :(得分:2)

使用grep。

而不是使用复杂的sed
grep matching_pattern file

这应该会给你想要的结果。

答案 3 :(得分:2)

grep肯定更好......因为它更快。

e.g。使用grep从我正在使用的数据集中提取染色体6的所有基因组序列数据:

$ time grep chr6 seq_file.in > temp.out

real    0m11.902s
user    0m9.564s
sys 0m1.912s

与sed相比:

$ time sed '/chr6/!d' seq_file.in > temp.out

real    0m21.217s
user    0m18.920s
sys 0m1.860s

我每次都重复3次和相同的值。