Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 删除除匹配图案线最佳实践(sed)之外的所有线_Unix_Sed - Fatal编程技术网

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标志以避免将任何结果打印到终端,但没有意识到-我本身已经实现了这一点。这意味着所有行都被删除,即使是那些匹配模式的行。