【发布时间】:2023-07-10 15:56:01
【问题描述】:
我想删除除包含匹配模式的行之外的所有行。
我就是这样做的:
sed -n 's/matchingpattern/matchingpattern/p' file.txt
但我只是好奇,因为我将匹配模式重命名为匹配模式本身。在这里看起来很浪费。
有没有更好的方法来做到这一点?
【问题讨论】:
我想删除除包含匹配模式的行之外的所有行。
我就是这样做的:
sed -n 's/matchingpattern/matchingpattern/p' file.txt
但我只是好奇,因为我将匹配模式重命名为匹配模式本身。在这里看起来很浪费。
有没有更好的方法来做到这一点?
【问题讨论】:
sed '/pattern/!d' file.txt
但你在这里重塑了grep。
【讨论】:
grep 当然更好...因为它更快。
例如使用 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 次,每次都使用相同的值。
【讨论】:
这可能对你有用:
sed -n '/matchingpattern/p' file.txt
/.../ 是一个地址,在这种情况下可能会附加操作 p。
【讨论】:
不要使用复杂的sed,而是使用grep。
grep matching_pattern file
这应该会给你想要的结果。
【讨论】: