Unix 删除除匹配图案线最佳实践(sed)之外的所有线
我要删除除包含匹配图案的行以外的所有行 我就是这样做的:Unix 删除除匹配图案线最佳实践(sed)之外的所有线,unix,sed,Unix,Sed,我要删除除包含匹配图案的行以外的所有行 我就是这样做的: sed -n 's/matchingpattern/matchingpattern/p' file.txt 但我只是好奇,因为我将匹配模式重命名为匹配模式本身。看起来像是浪费 有更好的方法吗 sed '/pattern/!d' file.txt 但是你在这里重新发明了grep。这可能适合你: sed -n '/matchingpattern/p' file.txt /…/是一个地址,在本例中可能会附加操作p而不是使用sed,这很复杂
sed -n 's/matchingpattern/matchingpattern/p' file.txt
但我只是好奇,因为我将匹配模式重命名为匹配模式本身。看起来像是浪费
有更好的方法吗
sed '/pattern/!d' file.txt
但是你在这里重新发明了
grep
。这可能适合你:
sed -n '/matchingpattern/p' file.txt
/…/
是一个地址,在本例中可能会附加操作p
而不是使用sed,这很复杂,请使用grep
grep matching_pattern file
这会给你想要的结果。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次,每次都是相同的值。+1表示“正确的工具”。但是sed可以在原地修改文件。是的。但是sed有一个漂亮的就地标志,grep没有。sed-i'/pattern/!d'filename比grep'pattern'filename>filename.tmp&&mv filename.tmp filename容易得多警告:我提供了--quiet标志以避免将任何结果打印到终端,但没有意识到-我本身已经实现了这一点。这意味着所有行都被删除,即使是那些匹配模式的行。