-1

Perl を使用して複数の行を削除したい大きなファイルがあるため、丸呑みはオプションではありません。

そのスパイスファイルは次のようなものです:

X1 param param param
+param param param
+param param param
X2 param param param
+param param param
+param param param
+param param param
X3 param param param
+**target_param** param param param
+param param param
+param param param
X4 param **target_param** param param
+param param param
+param param param

ターゲットはどこにでもある可能性があり、任意のインスタンス、つまり X(N) で始まり X(N+1) を含まない行は、出力ファイルから除外する必要があります。

サンプル出力:

X1 param param param
+param param param
+param param param
X2 param param param
+param param param
+param param param
+param param param
4

1 に答える 1

1

これは解決策になるでしょうか?の 2 回目のオカレンスは含まれませんtarget_parameter

更新:target_parameter解決策は、連続するブロックではなく、「ブロック」内で検索するようになりました (私が最初に問題を理解したように)。

#!/usr/bin/perl
use strict;
use warnings;

{
    local $/ = 'X';
    <DATA>; # discard first block (empty)
    while (<DATA>) {
        chomp;
        print "X$_" unless /target_param/;
    }   
}
__DATA__
X1 param param param
+param param param
+param param param
X2 param param param
+param param param
+param param param
+param param param
X3 param param param
+**target_param** param param param
+param param param
+param param param
X4 param **target_param** param param
+param param param
+param param param
X5 param param
+param param param
X6 param param param
+param param param **target_param**
+param param param
+param param param
X7 param **target_param** param param
+param param param
+param param param
X8 param param param
+param param param
+param param param

このデータからの出力は次のとおりです。

C:\Old_Data\perlp>perl try.pl
X1 param param param
+param param param
+param param param
X2 param param param
+param param param
+param param param
+param param param
X5 param param
+param param param
X8 param param param
+param param param
+param param param
于 2013-08-08T20:37:20.540 に答える