1

テキスト内の文字列を見つけるのに助けが必要です。

以下本文より

/infiletext の後に最初に出現するものを見つける必要があります${SALE}。を見つけたらinfile、次の内容を見つける必要があります/fields

以下の例から、出力は次のようになります。

all 1 char 178,
zip 170 char 5***

出力は /fields と次の/の間のテキストになります。シェル、perl、awk での解決策をいただければ幸いです。

スクリプトはここから始まります

${CHKERR}

echo ${SALE}
badchar ${SALE} - | upshift - - | ssort '

/stat
/padbyte " "

/infile 0 open stlf

***/fields
   all 1 char 178,
   zip 170 char 5***

/joinkey zip
/derived country "  "

/infile /data/retprep/rethold/statezip stlf

/fields
  zipkey 1 char 5,
  state 6 char 2

/derived x 1
4

3 に答える 3

2

最小のものではありませんが、機能します:

awk 'f3 && NF {print $0;getline;print $0;f3=0} /\${SALE}/ {f1=1} f1 && /\/infile/ {f2=1} f2 && /\*\*\*\/fields/ {f3=1}' file
   all 1 char 178,
   zip 170 char 5***
于 2013-10-12T19:33:22.240 に答える
1

このソリューションは、リスト内の各パターンを 1 つずつ探してファイルを読み取ることによって機能します。最後の行が見つかると、空白行が見つかるまでファイルの行が出力されます。

プログラムは、入力ファイルへのパスをコマンド ラインのパラメーターとして想定します。

use strict;
use warnings;

my @matches = ( qr<\${SALE}>, qr<\Q/infile>, qr<\Q/fields> );

for my $match (@matches) {
  while (<>) {
    last if $_ =~ $match;
  }
}

print while ($_ = <>) =~ /\S/;

出力

   all 1 char 178,
   zip 170 char 5***
于 2013-10-12T20:39:56.327 に答える