繁体   English   中英

用sed和regexp删除行

[英]remove lines with sed and regexp

我有一个看起来像这样的文件:

rs994321    -   chr6_ssto_hap7  712891  G   A   0.011180599999999999        0.0058201   62357
rs994321    -   chr6_mcf_hap5   675532  G   A   0.011180599999999999    0.0058201   62357
rs994321    -   chr6_mann_hap4  675338  G   A   0.011180599999999999    0.0058201   62357
rs994321    -   chr4_dbb_hap3   675681  G   A   0.011180599999999999    0.0058201   62357
rs994321    -   chr4_cox_hap2   891136  G   A   0.011180599999999999    0.0058201   62357
rs994321    -   chr6    29372356    G   A   0.011180599999999999    0.0058201   62357
rs9943219   +   chr1    238691947   A   G   0.00700761  0.00727069  62357
rs9943217   +   chr1    238691673   A   G   0.00663929  0.00715566  62357

我想删除带有模式chr*_*_hap* 在我的示例中,仅应保留最后3行。 我尝试使用以下命令,但它们不起作用:

sed '/chr[0-9]_*_hap[0-9]/d' test.txt
sed '/*_hap[0-9]/d' test.txt
sed '/\*_hap[0-9]/d' test.txt

我用regexp不是很好

$ egrep -v '\bchr([^_]*_){2}hap[0-9]\b' data
rs994321    -   chr6    29372356    G   A   0.011180599999999999    0.0058201   62357
rs9943219   +   chr1    238691947   A   G   0.00700761  0.00727069  62357
rs9943217   +   chr1    238691673   A   G   0.00663929  0.00715566  62357

或使用sed

$ sed -r '/\bchr([^_]*_){2}hap[0-9]\b/d' data
rs994321    -   chr6    29372356    G   A   0.011180599999999999    0.0058201   62357
rs9943219   +   chr1    238691947   A   G   0.00700761  0.00727069  62357
rs9943217   +   chr1    238691673   A   G   0.00663929  0.00715566  62357

使用awk

$ awk '! /chr[^_]*_[^_]*_hap[0-9]/' data
rs994321    -   chr6    29372356    G   A   0.011180599999999999    0.0058201   62357
rs9943219   +   chr1    238691947   A   G   0.00700761  0.00727069  62357
rs9943217   +   chr1    238691673   A   G   0.00663929  0.00715566  62357

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM