我想删除除包含匹配模式的行之外的所有行。
我就这样做了:
sed -n 's/matchingpattern/matchingpattern/p' file.txt
但我只是好奇,因为我将匹配模式重命名为匹配模式本身。看起来像是浪费。
有更好的方法吗?
答案 0 :(得分:48)
sed '/pattern/!d' file.txt
但你在这里重新发明grep
。
答案 1 :(得分:2)
这可能对您有用:
sed -n '/matchingpattern/p' file.txt
/.../
是一个地址,可能会在这种情况下附加操作p
。
答案 2 :(得分:2)
使用grep。
而不是使用复杂的sedgrep 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次和相同的值。