我有一个文本文件,如下所示:
entrez*gene/locuslink:"BRCA2(IV)"|entrez*gene/locuslink:At4g00020@entrez*gene/locuslink:RAD51|entrez*gene /locuslink:At5g20850@
entrez*gene/locuslink:"BRCA2(IV)"|entrez*gene/locuslink:At4g00020@entrez*gene/locuslink:DMC1|entrez*gene/locuslink:At3g22880@
我希望在unix中使用perl提取:和@ separators之间的单词 输出应该是:
At4g00020 At5g20850
At4g00020 At3g22880
我做了:
perl -l -ne '/:["At"]([^@]*)/ and print($1,"\t",$2)
没有成功 在此先感谢您的帮助
汤姆。
答案 0 :(得分:3)
你的正则表达式有一些问题。
首先,[...]表示与括号内的一个字符匹配的字符类。这意味着["At"]
将匹配其中一个字符''','A'或't'。省略括号和双引号..
其次,您想要收集多个匹配项。这可以通过在列表上下文中使用/ g修饰符来完成:
perl -lne '@result = /:At([^@]*)/g; print join("\t", @result)'
最后,根据预期的输出,您还需要捕获At:
perl -lne '@result = /:(At[^@]*)/g; print join("\t", @result)'
答案 1 :(得分:2)
尝试这样的事情:
perl -l -ne '/:(?=At)([^@]*)/ and print($1,"\t",$2)'
答案 2 :(得分:1)
这对我有用:
perl -l -ne '/:([^:@]*)@.*:([^:@]*)@/ and print($1,"\t",$2)'
搜索:
,不带分隔符的字符串,@
将其关闭。