我需要使用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]
请注意,感兴趣的行始终以/ref
和Query=
开头。我已经阅读了一些关于使用sed
的帖子,但我无法使其发挥作用。
提前致谢。
答案 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
文件。