2

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
4

4 に答える 4

4

この正規表現を使用します((ABC)|(WXYZ))_\d*

于 2012-07-16T10:19:57.227 に答える
3

一方通行:

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
于 2012-07-16T10:48:55.127 に答える
3

Perl である必要がありますか?

egrep -o '(WXYZ|ABC)_[0-9]*' dummy.txt
于 2012-07-16T11:21:20.710 に答える
1

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

于 2012-07-16T10:44:44.843 に答える