如何提取以“#”或“chr1”开头的行

如何提取以“#”或“chr1”开头的行

我有一个文件看起来像:

##Comment A
##Comment B
#Important header
chr1 content a
chr2 content b
chrX content x

我想将第 3 行和第 4 行提取到一个新文件中,该文件以 #(不是 ##)或“chr1”开头。

#Important header
chr1 content a

我尝试做

grep "^[^##]"

但这也会排除其中只有一个 # 的行。我想我总是可以分两步完成,但我会感激更好的解决方案!非常感谢。

答案1

对这两个模式进行“或”运算怎么样?

$ grep '^#[^#]\|^chr1' file
#Important header
chr1 content a

或者(-e形式是由 POSIX 指定

$ grep -e '^#[^#]' -e '^chr1' file
#Important header
chr1 content a

答案2

总是有另一种解决方案。使用awk您可以通过以下脚本来完成:

awk '{if( ($0~/^#/ && $0!~/^##/) || $0~/^chr1/){print $0}}' file

#如果该行以 开头但不是,则第一部分将查找该行,##如果该行以 开头,则第二部分将获取该行chr1,然后打印结果。

相关内容