微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

perl – 提取string列表

dummy.txt包含:

gflkgWXYZ_123jfdknABC_8723879bfdkh873ABC_456jhb gflkUI_12643jfdknABC_bfdk873WXYZ_7848jhb ABC_1121fABC_22462 WXYZ_33273 3ABC_888

我试图匹配所有这些WXYZ_(可选数字),即WXYZ_23和ABC_(可选数字)。 即ABC_

什么Perl脚本(我在没有GNU的solaris上运行)将允许我生成以下输出文件

WXYZ_123 ABC_8723879 ABC_456 ABC_ WXYZ_7848 ABC_1121 ABC_22462 WXYZ_33273 ABC_888

从bash中的string中删除所有特殊字符和大小写

当Gcc编译Boost :: regex和多个版本的boost时,未定义的引用存在

std :: regex_replace给了我意想不到的结果

使用参数redirect到主页url

Nginx的node.js下载大文件停止在1.08GB

Nginx – 将某个pathredirect到另一个

如何在Windows命令提示符下使用单一命令获取java版本?

有没有一个基于GNU Windows的文本编辑器,使用完整的正则expression式与伟大的文档查找replace?

奇怪的bug – std :: regex只匹配前两个string

Bash脚本打印模式1,从模式2到模式3search并打印所有行,并打印模式4

使用这个正则表达式((ABC)|(WXYZ))_d*

单程:

perl -ne ' push @list,$1 while m/((?:WXYZ|ABC)_d*)/g; END { printf qq|%sn|,join qq|n|,@list; } ' infile

输出

WXYZ_123 ABC_8723879 ABC_456 ABC_ WXYZ_7848 ABC_1121 ABC_22462 WXYZ_33273 ABC_888

它需要成为Perl吗?

egrep -o '(WXYZ|ABC)_[0-9]*' dummy.txt

burning_LEGION是正确的,但是在非捕获括号内进行交替操作更容易。 你也必须以某种方式收集结果。 假设你只想要ABC_或WXYZ_而不是别的,试试这个简短的程序:

#!/usr/bin/env perl use warnings; use strict; my @matches; open(FILE,'<',"dummy.txt") or die "Failed to open dummy.txt - $!n"; foreach (<FILE>) { 1 while /((?:ABC|WXYZ)_d*)/g && push(@matches,$1); } close(FILE) or die "Failed to close dummy.txt - $!n"; open(OUTPUT,'>',"output.txt") or die "Failed to open output.txt - $!n"; print OUTPUT join("n",@matches); close(OUTPUT) or die "Failed to close output.txt - $!n"; exit 0;

$ cat output.txt

WXYZ_123

ABC_8723879

ABC_456

ABC_

WXYZ_7848

ABC_1121

ABC_22462

WXYZ_33273

ABC_888

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐