我有一个文件看起来像:
##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
,然后打印结果。