perl正则表达式提取特定单词

时间:2012-09-24 09:12:52

标签: regex perl unix

我有以下文本文件示例:

AFUA_2G08360|pyrG
AFUA_2G12630
gel1|bgt2|AFUA_2G01170

我希望使用正则表达式在unix命令行中使用AFUA_2G08360过滤掉AFUA_2G12630AFUA_2G01170perl -l -ne。 你会怎么建议这样做?

5 个答案:

答案 0 :(得分:1)

为什么不将'sed'与

这样的东西一起使用

sed 's/AFUA_2G\d{5}//'

答案 1 :(得分:0)

AFUA_[0-9A-Za-z]{7} 

见这里:http://regexr.com?328gj

命令行:

user@mch:/tmp$ cat input.txt 
AFUA_2G08360|pyrG
AFUA_2G12630
gel1|bgt2|AFUA_2G01170

user@mch:/tmp$ cat input.txt | perl -lne "@matches = /AFUA_[0-9A-Za-z]{7}/g; print join("\n", @matches)";
AFUA_2G08360
AFUA_2G12630
AFUA_2G01170

答案 2 :(得分:0)

试试这个表达式:

/(AFUA_2G\d+)/g

答案 3 :(得分:0)

这是您的示例输入的可行单行。

cat data | perl -l -e 'while (<>) {s/.*(AFUA_[^\|]*).*/\1/g; print}'

答案 4 :(得分:0)

使用

perl -pe 's/.*(AFUA_[0-9a-zA-Z]*).*$/\1/' your_file

测试:

> cat temp
    AFUA_2G08360|pyrG
    AFUA_2G12630
    gel1|bgt2|AFUA_2G01170
> perl -pe 's/.*(AFUA_[0-9a-zA-Z]*).*$/\1/' temp
AFUA_2G08360
AFUA_2G12630
AFUA_2G01170