【问题标题】:Regex multine replacement perl正则表达式多行替换 perl
【发布时间】:2017-08-28 09:08:45
【问题描述】:

在昨天用一个略显草率且没有包含足够信息的版本让人们感到困惑之后发布了这个问题。

我认为这些问题相当简单,但我提供了很多上下文来提供帮助。

所以,我有一个由自动化系统创建的文件 (FILEA.txt),该文件的一个子集发布在此问题的底部,标题为 ===DATA===。我不会发布整个文件,因为它有 36k 行长....除非认为有必要。

该文件由许多文本块组成,每个文本块都描述了金融图表上的实体(线条/圆圈/符号等)。

每个块都以一致的三行开头...

CHARTS
  Color=14671839
  Layer=X

其中 X 是一个从 1 到 12 的数字。因此,在下面显示的文件示例中,我们有 Layer=12。

我已经有一个每天运行的自动化流程,可以为需要不同格式的用户将文件重新格式化为多种格式(FILEB、FILEC、FILED 等)。

该过程由 6-7 个文件组成。其中 5-6 个产生各种格式。这些是批处理文件,示例之一如下:

perl supplement.pl "s/Feed=5,8,F/Feed=3,8,F/g; s/@NQ#/NQ #F/g; s/@ES#/ES #F/g; s/@YM#/YM #F/g; s/QGC#/GC #F/g; s/QSI#/SI #F/g; s/QCL#/CL #F/g; s/QPA#/PA #F/g; s/QHG#/HG #F/g; s/QNG#/NG #F/g; s/@LB#/LBS #F/g; s/@O#/ZO #F/g; s/@RR#/ZR #F/g; s/@S#/ZS #F/g; s/@W#/ZW #F/g; s/@GF#/FC #F/g; s/@LE#/LC #F/g; s/QHO#/HO #F/g; s/@C#/ZC #F/g; s/@DX#/DX #F/g; s/AUDUSD.COMP/AUD A0-FX/g; s/USDCAD.COMP/CAD A0-FX/g; s/USDCHF.COMP/CHF A0-FX/g; s/EURUSD.COMP/EUR A0-FX/g; s/GBPUSD.COMP/GBP A0-FX/g; s/USDJPY.COMP/JPY A0-FX/g; s/NZDUSD.COMP/NZD A0-FX/g; s/@US#/ZB #F/g; s/@TY#/ZN #F/g;" c:/PATHTOFILE/FILEA.txt c:/PATHTOFILE/FILEB.txt

它读取 FILEA.txt,执行转换并输出到 FILEB.txt

最后的文件是一个supplement.pl,除了包含在每个批处理文件中的格式更改之外,它还从每种格式中删除了两个元素。在supplement.pl 中去掉警告线和圆圈的两行都以“$contents =~”开头。

我希望添加第三条“条带”线,将每个块全部剥离 WHERE Layer=7。我想这会一直寻找 Charts/n Color=14671839/n Layer=7 一直到下一个“Charts”,并将该批次替换为“Charts”,这意味着先前的块消失了。我希望这是有道理的。

我试图在这里全面,但如果有帮助,我很乐意提供更多信息。

===开始补充。PL===

#!/usr/bin/perl

$sub = shift @ARGV;
$input = shift @ARGV;
$output = shift @ARGV;


open INPUT, "<","$input" or die $!;         
open OUTPUT, ">","$output" or die $!;           

local $/ = undef;
$contents = <INPUT>;

@subs = split('; ', $sub);
foreach (@subs)
{
    @re = split( m/(?<!\\)\//, $_);
    tr/\\//d for @re;

    $contents =~ s/$re[1]/$re[2]/g;
}

$contents =~ s/\[19\]\= <<<\s+Circle(?s).*?\[28\]\=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//g;
$contents =~ s/\[19\]\= <<<\s+Draw Line Alarmed(?s).*?\[28\]\=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//g;
===NEED STRIP NEW LINE HERE===

print OUTPUT $contents;

close INPUT;
close OUTPUT;

===END SUPPLEMENT.PL===

==开始样本数据===

CHARTS
  Color=14671839
  Layer=12
  [0] Font=MS SAN SERIF,10,0,F,F,
  [1] Show=F,F,F,T,T,F,T,F,F,T,
  [2] Scale=F,F,T,F,F,F,F,F,0,T,F,
  [3] Grid=F,F,F,F,1,
  [4] Paint=F,F,F,0,0,0,
  [5] Bars=1,2000,1970,
  [6] Colors=65793,0,0,8388608,32767,65793,0,0,
  [7] Theme=6,0,255,65280,7566080,0,16777215,0,
  [8] Candles=F,F,F,F,1,F,
  [9] Filter=T,F,F,F,F,0,0
  [10] Type=F,F,F,F,15,44656,
  [11] Spacing=3,49,0,10,4,-7,73,
  [12] Range=56.16,18.72,0.01,0.01
  [13] Volume=0,100,0,0,0,0,
  [14] Refresh=0,0,0,
  [15] Feed=5,1,F,
  [16] Template=
  [17] Symbol=XLP.W
  [18] SubSizes=0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Note: SPDR Consumer Staples Sector   >>>
  [20]=76,44700,0,0,513,2304,29325,4158,10,59619,29671,10589,21907,2496,29325,4158,10,
  [21]=-2083405824,1,0,8388608,255,16711680,16711680,16711680,16711680,11842740,0,0,0,0,0,0,32,32,32,32,32,32,32,32,
  [22]=-2083405705,1,1035611788,-1096111445,1151639552,1101497088,1147076608,1435707648,1696464,5525461,1921845696,659518,13,29,182101436,1696464,1696712,1696552,139104368,4830724,1696712,2,1696712,4225200,139104368,1696552,
  [23]=8,0,2,67167744,1150116,0,1150116,67137536,1150828,0,0,0,0,0,0,1,1,1,1,3,1,0,0,0,0,
  [24]=0,71,1,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,0,28,83,80,68,82,32,67,111,110,115,117,109,101,114,32,83,116,97,112,108,101,115,32,83,101,99,116,111,114,
  [25]=255,242,118,160,226,25,0,80,120,35,2,0,0,0,0,71,1,0,0,0,0,0,0,0,0,0,0,213,15,122,1,240,27,244,118,0,0,0,0,252,36,11,116,152,13,232,115,116,20,35,
  [26]=0,71,1,0,0,236,162,218,10,0,0,0,0,192,73,156,1,177,2,0,0,0,0,0,0,24,198,216,10,28,0,0,0,166,13,232,115,42,0,0,0,16,227,25,0,92,15,167,118,36,
  [27]=163,218,10,252,197,216,10,28,0,0,0,0,0,0,0,224,228,25,0,228,4,0,0,105,15,167,118,110,115,117,109,0,0,0,0,28,0,0,0,0,0,0,64,1,0,0,0,68,227,25,
  [28]=5506571,1696712,139104368,139104368,5506571,1696712,139104368,139104368,1944577216,24776661,0,327,0,0,3366912,1,1435707981,-2147483648,1995709424,327,0,0,0,2298996,0,

  [19]= <<<    Line     h    19.28    58.58   >>>
  [20]=65,44701,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [21]=16711680,16711680,8421376,0,255,255,16711680,16711680,65280,16744447,32767,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [22]=0,0,118.33334,0,118.33334,19.2794,58.58068,58.58068,5,0,0,0,0,0,0,1,0,0.1,0,0,0,0,0,0,0,0,
  [23]=1,0,0,0,1161209,0,1161209,255,1090313,1,2,2,1,0,1,1,1,1,1,1,1,0,0,0,0,
  [24]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [25]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [26]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [27]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [28]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Line     i    45.35    84.64   >>>
  [20]=65,44702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [21]=16711680,16711680,8421376,0,255,255,16711680,16711680,65280,16744447,32767,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [22]=0,0,359.66666,0.33333,359.66666,45.34758,84.64344,84.64344,5,0,0,0,0,0,0,1,0,0.1,0,0,0,0,0,0,0,0,
  [23]=1,0,0,0,1161209,0,1161209,255,1131025,1,2,2,1,0,1,1,1,1,1,1,1,0,0,0,0,
  [24]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [25]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [26]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [27]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [28]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

CHARTS
  Color=14671839
  Layer=12
  [0] Font=MS SAN SERIF,10,0,F,F,
  [1] Show=F,F,F,T,T,F,T,F,F,T,
  [2] Scale=F,F,T,F,F,F,F,F,0,T,F,
  [3] Grid=F,F,F,F,1,
  [4] Paint=F,F,F,0,0,0,
  [5] Bars=1,2000,1970,
  [6] Colors=65793,0,0,8388608,32767,65793,0,0,
  [7] Theme=6,0,255,65280,7566080,0,16777215,0,
  [8] Candles=F,F,F,F,1,F,
  [9] Filter=T,F,F,F,F,0,0
  [10] Type=F,F,F,F,15,44657,
  [11] Spacing=10,261,0,10,4,-7,73,
  [12] Range=53.46,41.04,0.01,0.01
  [13] Volume=0,100,0,0,0,0,
  [14] Refresh=0,0,0,
  [15] Feed=5,1,F,
  [16] Template=
  [17] Symbol=EWW.W
  [18] SubSizes=0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Line     p    57.74    31.41   >>>
  [20]=65,47387,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [21]=16711680,16711680,8421376,0,255,255,16711680,16711680,65280,16744447,32767,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [22]=0,0,82.25,0,82.25,57.74,31.41068,31.41068,5,0,0,0,0,0,0,1,0,0.1,0,0,0,0,0,0,0,0,
  [23]=1,0,0,0,1161209,0,1161209,255,1130628,1,2,2,1,0,1,1,1,1,1,1,1,0,0,0,0,
  [24]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [25]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [26]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [27]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [28]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Line     q    77.54    51.23   >>>
  [20]=65,47388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [21]=16711680,16711680,8421376,0,255,255,16711680,16711680,65280,16744447,32767,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [22]=0,0,65.5,0.25,65.5,77.53828,51.22672,51.22672,5,0,0,0,0,0,0,1,0,0.1,0,0,0,0,0,0,0,0,
  [23]=1,0,0,0,1161209,0,1161209,255,1130301,1,2,2,1,0,1,1,1,1,1,1,1,0,0,0,0,
  [24]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [25]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [26]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [27]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [28]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Line     r    62.76    36.45   >>>
  [20]=65,47389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [21]=16711680,16711680,8421376,0,255,255,16711680,16711680,65280,16744447,32767,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [22]=0,0,165.25,0,165.25,62.75862,36.44707,36.44707,5,0,0,0,0,0,0,1,0,0.1,0,0,0,0,0,0,0,0,
  [23]=1,0,0,0,1161209,0,1161209,255,1150130,1,2,2,1,0,1,1,1,1,1,1,1,0,0,0,0,
  [24]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [25]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [26]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [27]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [28]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

CHARTS
  Color=14671839
  Layer=12
  [0] Font=MS SAN SERIF,10,0,F,F,
  [1] Show=F,F,F,T,T,F,T,F,F,T,
  [2] Scale=F,F,T,F,F,F,F,F,0,T,F,
  [3] Grid=F,F,F,F,1,
  [4] Paint=F,F,F,0,0,0,
  [5] Bars=1,2000,1970,
  [6] Colors=65793,20480,1376384,8388608,32767,65793,0,0,
  [7] Theme=6,0,255,65280,7566080,0,16777215,0,
  [8] Candles=F,F,F,F,1,F,
  [9] Filter=T,F,F,F,F,0,0
  [10] Type=F,F,F,F,15,44658,
  [11] Spacing=3,290,0,10,4,-7,73,
  [12] Range=39.6,7.92,0.62,0.01
  [13] Volume=0,100,0,0,0,0,
  [14] Refresh=0,0,0,
  [15] Feed=5,1,F,
  [16] Template=
  [17] Symbol=XHB.W
  [18] SubSizes=0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Line     o    19.94    43.15   >>>
  [20]=65,9114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [21]=16711680,16711680,8421376,0,255,255,16711680,16711680,65280,16744447,32767,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [22]=0,0,27.5,0,27.5,19.94,43.1505,43.1505,5,0,0,0,0,0,0,1,0,0.1,0,0,0,0,0,0,0,0,
  [23]=1,0,0,0,1160101,0,1160101,255,1100423,1,2,2,1,0,1,1,1,1,1,1,1,0,0,0,0,
  [24]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [25]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [26]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [27]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [28]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Line     p     7.96    31.18   >>>
  [20]=65,9115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [21]=16711680,16711680,8421376,0,255,255,16711680,16711680,65280,16744447,32767,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [22]=0,0,-0.25,0.25,-0.25,7.95896,31.18213,31.18213,5,0,0,0,0,0,0,1,0,0.1,0,0,0,0,0,0,0,0,
  [23]=3,0,0,0,1150605,0,1150605,255,1090313,1,2,2,1,0,1,1,1,1,1,1,1,0,0,0,0,
  [24]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [25]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [26]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [27]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [28]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Line     q    11.20    34.43   >>>
  [20]=65,9116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [21]=16711680,16711680,8421376,0,255,255,16711680,16711680,65280,16744447,32767,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [22]=0,0,88.75,0.25,88.75,11.20242,34.42559,34.42559,5,0,0,0,0,0,0,1,0,0.1,0,0,0,0,0,0,0,0,
  [23]=3,0,0,0,1160101,0,1160101,255,1110624,1,2,2,1,0,1,1,1,1,1,1,1,0,0,0,0,
  [24]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [25]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [26]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [27]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [28]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Line     r    18.50    41.72   >>>
  [20]=65,9117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [21]=16711680,16711680,8421376,0,255,255,16711680,16711680,65280,16744447,32767,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [22]=0,0,133,0.5,133,18.5002,41.72338,41.72338,5,0,0,0,0,0,0,1,0,0.1,0,0,0,0,0,0,0,0,
  [23]=3,0,0,0,1160101,0,1160101,255,1120427,1,2,2,1,0,1,1,1,1,1,1,1,0,0,0,0,
  [24]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [25]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [26]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [27]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  [28]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

  [19]= <<<    Note: SPDR Homebuilders ETF   >>>
  [20]=76,44659,0,0,513,63488,25,5552,29674,39301,9851,27405,26412,63420,25,2963,29325,
  [21]=-2083405824,1,0,8388608,255,16711680,16711680,16711680,16711680,11842740,0,0,0,0,0,0,32,32,32,32,32,32,32,32,
  [22]=-2083405705,1,1056964608,1106597205,1155792896,1090936302,1146437632,0,1,0,0,112,-1,-1,1944577820,1944579083,0,0,0,0,0,1921845696,0,31918584,0,16,
  [23]=

==结束样本数据===

【问题讨论】:

  • 老实说,我仍然不明白您想要什么 - 因为:您的输入数据包含太多不必要的部分,主要是因为您错过了添加 WANTED 输出... :) minimal reproducible example是件好事。
  • 我确实详细说明了上面所需的输出。我需要从 Charts.... 中删除整个块到下一个 Charts WHERE Layer=7。老实说,我不知道如何表达这一点。抱歉,这实际上是一个非常简单的要求,但我似乎无法传达它。
  • 昨天我已经回答了你的问题。将===NEED STRIP NEW LINE HERE=== 替换为$contents = join 'CHARTS', grep { !/Layer\s*=\s*7\b/ } split /\bCHARTS\b/, $contents;(来自yesterday's answer,您就完成了。您也可以使用任何其他答案,例如$contents = join '', grep { !/Layer\s*=\s*7\b/ } split /^(?=CHARTS)/m, $contents。两者都解决了问题,这里不需要再问了同样的问题。
  • 您是否尝试过昨天有关使用Layer=7 删除图表块的任何答案?
  • @jm666 我尝试了上述两个建议,但输出文件已创建但为空。两者都不会产生任何错误并运行,但会产生零输出。

标签: regex perl replace multiline


【解决方案1】:

所以,从你的问题来看:

我正在寻找添加第三条“条带”线,以去除其中的每个块 整个WHERE Layer=7

您是否注意到,在您的示例数据中没有任何部分包含Layer=7

现在解决办法:

非常感谢您的代码,添加了来自 cmets 的行(例如来自your previous same question 的答案。

#!/usr/bin/perl

$sub = shift @ARGV;
$input = shift @ARGV;
$output = shift @ARGV;


open INPUT, "<","$input" or die $!;         
open OUTPUT, ">","$output" or die $!;           

local $/ = undef;
$contents = <INPUT>;

@subs = split('; ', $sub);
foreach (@subs)
{
    @re = split( m/(?<!\\)\//, $_);
    tr/\\//d for @re;

    $contents =~ s/$re[1]/$re[2]/g;
}

$contents =~ s/\[19\]\= <<<\s+Circle(?s).*?\[28\]\=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//g;
$contents =~ s/\[19\]\= <<<\s+Draw Line Alarmed(?s).*?\[28\]\=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,//g;

#this is the added line
$contents = join '', grep { !/Layer\s*=\s*7\b/ } split /^(?=CHARTS)/m, $contents;
#or this works too
#$contents = join 'CHARTS', grep { !/Layer\s*=\s*7\b/ } split /\bCHARTS\b/, $contents;

print OUTPUT $contents;

close INPUT;
close OUTPUT;

以上:

  • 针对您的数据进行了测试。
  • 它产生输出。
  • 而且,如果您在输入数据中有一些包含Layer=7CHARTS section,它将被删除。

【讨论】:

  • 感谢一百万您的支持。它工作正常。我现在看到我的问题是缺少打印输出行。抱歉这么慢,这不是我的强项,感谢您的耐心等待。
  • @PaulC yw 并享受。 :) 你也可以阅读:What should I do when someone answers my question?
  • 我只是想跟进@jm666。当您发布此解决方案时,我试图对此解决方案进行投票,但显然我的声誉不足(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 2018-10-20
相关资源
最近更新 更多