我想捕捉一个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