2012-02-23 11 views
0

これは重複した投稿だと言うかもしれませんが、私は以前の解決方法を試してみて、うまくいかないようです!私は何らかの理由でperlの代わりに置換置換を含む解決策を見ていますが、それは表示する代わりにテキストマッチングパターンを置き換えます!以下は、ソーステキスト私はerror=9607を発見した後ClassThree:....を含むすべての行を抽出したいsedまたはperlを使用した複数行の文字列検索

ClassOne:error=9607 
ClassTwo:This is junk test 
ClassThree:I|want|to|extract|this|text|after|error=9607 

です。私はこれを実行するために、(sshコマンドでコマンドを使用して)多数のサーバー上の複数のファイルにまたがって実行するので、これを行うには1行のコマンドを使用することをお勧めします。

この点に関するヘルプ/参考情報は高く評価されます。

+0

ありがとうございました!残念ながら、以下のコマンドのどれも私のサーバーで動作しませんでした。これは私のサーバー上で動作する旧バージョンのAIXのためだと思います。幸運にも、私は@ potongのコメントに基づいて 'awk'をもっと探しました。それは解決策' awk/begin /、/ end/filename 'をかなり綺麗にしていたようです。 :-) – jeet

答えて

1

ClassThreeは常にerror=9607後の2行になる場合は、あなただけのことができます:ここで

grep -A 2 'error=9607' input.txt 
0

はperlの試み

編集です:私は

にもチェック
use strict; 
my @errors = (9607,9608); 
open(FILE,"filescan.txt")||die "Error: cannot read file\n$!"; 
while(<FILE>){ 
    chomp(my $line = $_); 
    if ($line =~ /^ClassOne:error=(\d+)/) { 
     my $errorCode = $1; 
     if (grep { $_ == $errorCode } @errors) { 
      print "$line\n"; 
      while(<FILE>){ 
       chomp(my $line = $_); 
       if ($line =~ /^ClassThree:.*\|error=$errorCode/) { 
        print "$line\n"; 
        last; 
       } 
      } 
      print "----------\n"; 
     } 
    } 
} 
close FILE; 
を特定のエラーを追加しました

出力:

ClassOne:error=9607 
ClassThree:I|want|to|extract|this|text|after|error=9607 
---------- 
ClassOne:error=9608 
ClassThree:I|want|to|extract|this|text|after|error=9608 
---------- 
1

これはあなたのために働くかもしれない:

sed '/error=9607/,/ClassThree/{//!d}' file 
ClassOne:error=9607 
ClassThree:I|want|to|extract|this|text|after|error=9607 

だけClassThreeラインたい場合:

cat <<! >file 
> ClassOne:error=9607 
> ClassTwo:This is junk test 
> ClassThree:I|want|to|extract|this|text|after|error=9607 
> ClassOne:error=9608 
> ClassTwo:This is junk test 
> ClassThree:I|want|to|extract|this|text|after|error=9607 
> ClassOne:error=9609 
> ClassTwo:This is junk test 
> ClassThree:I|want|to|extract|this|text|after|error=9607 
>! 
sed '/error=9607/h;G;/ClassThree.*\n./P;d' file 
ClassThree:I|want|to|extract|this|text|after|error=9607 
ClassThree:I|want|to|extract|this|text|after|error=9607 
ClassThree:I|want|to|extract|this|text|after|error=9607 

またはこのAWK:あなたはすべての行がその後ClassThreeを含む場合

sed '/error=9607/,/ClassThree/{/ClassThree/!d}' file 
ClassThree:I|want|to|extract|this|text|after|error=9607 

を溶液:

awk '/error=9607/{p=1};/ClassThree/ && p' file 
0
$ perl -ple 'print if /^ClassThree/ && /error=9607/ .. /\0/' file