使用 grep 时如何去掉“--”行分隔符

How do I get rid of “--” line separator when using grep

我正在使用下面给出的命令将我的 fastq 文件分成两个单独的配对末端读取文件:

grep '@.*/1' -A 3 24538_7#2.fq >24538_7#2_1.fq
grep '@.*/2' -A 3 24538_7#2.fq >24538_7#2_2.fq

但它会自动在条目之间引入 -- 行分隔符。因此,使我的 fastq 文件不适合进一步处理(因为它会变成无效的 fastq 格式)。 所以,我想去掉行分隔符 (--)。 PS:我找到了 Linux 机器的答案,但我正在使用 MacOS,但这些在 Mac 终端上不起作用。

您可以使用 --no-group-separator 选项来抑制它(在 GNU grep 中)。

或者,您可以使用 (GNU) sed:

sed '\|@.*/1|,+3!d'

删除除匹配 @.*/1 的行和接下来的三行之外的所有行。

对于 macOS sed,您可以使用

sed -n '\|@.*/1|{N;N;N;p;}'

但是对于更多的上下文行来说,这很快就会变得笨拙。

另一种方法是将 grep 自身链接起来:

grep '@.*/1' -A 3 file.fq | grep -v "^--"

第二个 grep 选择以 -- 开头的非匹配 (-v) 行(尽管这种模式有时可以解释为命令行选项,需要一些奇怪的转义,例如 "[-][-]",这就是为什么我把 ^ 放在那里的原因)。