我有以下文本文件示例:
AFUA_2G08360|pyrG
AFUA_2G12630
gel1|bgt2|AFUA_2G01170
我希望做一个正则表达式来过滤掉AFUA_2G08360
, AFUA_2G12630
,在 unix 命令行中AFUA_2G01170
使用。
你会如何建议这样做?perl -l -ne
为什么不将'sed'与类似的东西一起使用
sed 's/AFUA_2G\d{5}//'
Try this expression:
/(AFUA_2G\d+)/g
利用
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
这是您的示例输入的可行单行代码。
cat data | perl -l -e 'while (<>) {s/.*(AFUA_[^\|]*).*/\1/g; print}'
AFUA_[0-9A-Za-z]{7}
命令行 :
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