【发布时间】:2015-08-04 22:28:06
【问题描述】:
我正在尝试删除两个字符串之间的文本,但保留模式前后的所有数据。我正在使用的示例文本:
comp117_c0_seq1 len=214 path=[173:0-52 372:53-71 226:72-213]
comp143_c0_seq1 len=285 path=[263:0-226 490:227-284]
comp541_c0_seq1 len=230 path=[1:0-132 134:133-229] gi|356502740|ref|XP_003520174.1| PREDICTED: uncharacterized protein LOC100809655 [Glycine max] 1.30898e-39 68 76
所以目标是删除从“len”开始到“path = [...]”结束的文本。并保留该文本区域之前和之后的所有内容。 有人有什么建议吗。我希望输出看起来像:
comp117_c0_seq1
comp117_c0_seq1
comp541_c0_seq1 gi|356502740|ref|XP_003520174.1| PREDICTED: uncharacterized protein LOC100809655 [Glycine max] 1.30898e-39 68 76
提前致谢。
【问题讨论】:
-
你有没有尝试过?这看起来很简单
-
也发布预期的输出
-
嗨,我正在尝试 awking 第一列并填充模式匹配,但我对 sed 的学习不太好,而且由于模式的长度可以变化,我不太确定去做吧。
-
够简单
sed -E 's/len.*path[^]]*\]//' -
或者因为 perl 可以识别非贪婪运算符并给出数据的形状:
perl -pe 's/len.*?\]//'