Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex perl-提取字符串列表_Regex_Linux_Perl_Unix_Grep - Fatal编程技术网

Regex perl-提取字符串列表

Regex perl-提取字符串列表,regex,linux,perl,unix,grep,Regex,Linux,Perl,Unix,Grep,dummy.txt包含: gflkgWXYZ_123jfdknABC_8723879bfdkh873ABC_456jhb gflkUI_12643jfdknABC_bfdk873WXYZ_7848jhb ABC_1121fABC_22462 WXYZ_33273 3ABC_888 我正在尝试匹配所有这些WXYZ_(可选数字),即WXYZ_23和ABC_(可选数字)。美国广播公司_ 什么perl脚本(我在solaris上运行,没有GNU)允许我生成以下输出文件 WXYZ_123 ABC_8723

dummy.txt包含:

gflkgWXYZ_123jfdknABC_8723879bfdkh873ABC_456jhb
gflkUI_12643jfdknABC_bfdk873WXYZ_7848jhb
ABC_1121fABC_22462
WXYZ_33273
3ABC_888
我正在尝试匹配所有这些WXYZ_(可选数字),即WXYZ_23和ABC_(可选数字)。美国广播公司_

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

WXYZ_123
ABC_8723879
ABC_456
ABC_
WXYZ_7848
ABC_1121
ABC_22462
WXYZ_33273
ABC_888

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

burning\u LEGION是正确的,尽管在非捕获括号内进行交替比较容易。你还必须以某种方式收集结果。假设您只想要ABC_uu或WXYZ_u,而不想要其他任何东西,请尝试以下简短程序:

#!/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;
#/usr/bin/env perl
使用警告;
严格使用;
我的@matches;
打开(文件,,“output.txt”)或死“无法打开output.txt-$!\n”;
打印输出联接(“\n”,@matches);
关闭(输出)或关闭“无法关闭OUTPUT.txt-$!\n”;
出口0;
$cat output.txt
WXYZ_123
ABC8723879
ABC_456
ABC\uubr> WXYZ_7848
ABC_1121
ABC_22462
WXYZ_33273
ABC_888

单向:

perl -ne '
    push @list, $1 while m/((?:WXYZ|ABC)_\d*)/g;
    END { 
        printf qq|%s\n|, 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

这样的字符串可以跨越新的界限吗?另外,我知道您只需要WXYZ或ABC,或者任何三个字母的大写字母都可以?只需要WXYZ或ABC而不是其他字符串组合。要完成答案,perl-pe'$\uxyz=join“\n”/(?:ABC | WXYZ)\uxyz*)/g“将是最终脚本。