如何从同一个文件中多次出现一个stringgrep

我想捕捉一个string1 row affected.. 。 但问题是同一个文件中没有这样的string。

我关心捕获1 row affected..只有在stringUPDATE kplustp..Service SET Service_Name = "PositionService", ServiceType = \'Z\', Hostname = " "在日志文件中。 1 row affected..将在Job completed successfully 3 4个句子后出现。

我正在solaris上工作。

怎么做?

 perl -e 'while (<>) { if (/job completed successfully/) { $flag=1; } elsif (/1 row affected/) { print; } else { $flag=0; } }' 

如果你有GNU的grep,你可以利用它的能力来显示匹配的尾随上下文:

 cmd... | grep -A 5 "Job completed successfully" | grep "1 row affected" 

第一个grep将查找字符串Job completed successfully ,同时还提供了五个后续行。 在其他grep查找1 row affected ,并打印匹配。

假设一些输入像

 $ printf "1 row affected...\nsomeline\nsomeline\nJob completed successfully\nsomeline\nsomeline\n2 row affected...\n3 row affected...\n" 1 row affected... someline someline Job completed successfully someline someline 2 row affected... 3 row affected... 

假设您只需要包含“受影响的行”的“作业成功完成”之后的第一行。 你可以像这样管道

 | sed -n -e '/Job completed successfully/,$p' | grep -m 1 "affected" 

例如

 $ printf "1 row affected...\nsomeline\nsomeline\nJob completed successfully\nsomeline\nsomeline\n2 row affected...\n3 row affected...\n" | sed -n -e '/Job completed successfully/,$p' | grep -m 1 "row affected" 2 row affected... 

sed匹配包含Job completed successfully任何行Job completed successfully并从该行返回到文件末尾, grep -m NUM只显示grep -m NUM的第一个NUM匹配项。 也许可以做一个sed想法变得更加混乱。 如果grep -m NUM不可用,那么你可以直接跳到head ,例如

 | sed -n -e '/Job completed successfully/,$p' | grep "affected" | head -n 1