复制完整文本行,然后复制特定模式

时间:2016-05-10 18:33:13

标签: ubuntu command-line sed

我需要使用linux命令行复制整个文本后面的文本。

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

  

Query = lcl | TRINITY_DN38349_c2_g130_i1 len = 264 path = [13442:0-77   13443:78-113 13444:114-116 13445:117-137 13446:138-141 13447:142-181   13448:182-182 13449:183-190 13450:191-220 13451:221-237 13452:238-263]   [-1,13442,1344,134444,13445,13446,13447,13448,13449,13450,   13451,13452,-2]

     

长度= 612   序列产生显着的比对:

     

REF | XP_011662878.1 |预测:在恶性脑肿瘤中被删除...   71.2 8e-11 ref | XP_011660819.1 |预测:galectin-3结合蛋白样[... 61.2 1e-08 ref | XP_011662496.1 |预料到的:   在恶性脑肿瘤中被删除... 60.5 2e-07

     

/ REF | XP_011662878.1 |预测:在恶性脑瘤中删除1个蛋白样[Strongylocentrotus purpuratus]长度= 903

我需要复制以Query= lcl|TRINITY/ref|开头的整行。问题是我有几十个像这样的文件,每个文件都有数百个文本行,所以这些图案后面的数字和文字不断变化。我希望将它们重定向到一个文件中。

理想情况下,输出应如下所示:

  

查询= lcl | TRINITY_DN38349_c2_g130_i1

     

/ REF | XP_011662878.1 |预测:在恶性脑瘤中删除1个蛋白样[Strongylocentrotus purpuratus]

请注意,感兴趣的行始终以/refQuery=开头。我已经阅读了一些关于使用sed的帖子,但我无法使其发挥作用。

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用find和sed,获取所需输出样本中的截断行(从当前目录递归搜索):

find . -type f -exec sed -n 's/^\(Query= lcl|TRINITY[^ ]*\) .*/\1/p;s/^\(\/ref.*\) .*/\1/p' '{}' \; > output 

要保存从Query= lcl|TRINITY/ref开始的整行:

find . -type f -exec sed -n '/^Query= lcl|TRINITY/p;/^\/ref.*/p' '{}' \; > output 

匹配的行保存到output文件。