我需要帮助才能在文本中找到字符串。
从下面的文字
我需要在文字/infile
之后找到${SALE}
的第一次出现。找到infile
后,我需要找到以下/fields
从下面的示例中,输出应为
all 1 char 178,
zip 170 char 5***
输出将是/ fields和下一个 / 之间的文本。 shell,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
答案 0 :(得分: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***
答案 1 :(得分:1)
尝试这样做:
perl -0777ne '
print $1 if m!/infile.*?/fields\n(.*?)^$!ms and qr<\${SALE}> .. eof
' file
答案 2 :(得分: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***