如何grep(或其他命令?)第一个实例在日志中的最后一个实例?

如何一个grep /search一个文本文件,使结果显示与string的第一行,然后每隔一行,直到与string的最后一行?

所以,如果我有一个如下所示的文件:
一个
一个

C
C

一个
一个

而我执行这个命令search“B”,它会产生:

C
C

我会用sed

 sed -n '/B/,/B/p' file 

这不是一个命令行,而是一个小function,可以帮助你(在Linux上):

  function grepbetween { match=$(grep -n "$1" "$2" | sed -e 's/:.*//') nolines=$(echo $match | wc -w) if [ $nolines -gt 1 ] then init=$(echo $match | cut -f1 -d" ") end=$(echo $match|cut -f${nolines} -d" ") nolines=$(wc -l "$2" | awk '{print $1}') startline=$((nolines-init)) betweenlines=$((end-init)) cat $2 | tail -${startline} | head -${betweenlines} fi } 

其输出的一个例子:

 [jbuser@jbossserver configuration]$ grepbetween extensions standalone.xml <extension module="org.jboss.as.clustering.infinispan"/> <extension module="org.jboss.as.connector"/> <extension module="org.jboss.as.deployment-scanner"/> <extension module="org.jboss.as.ee"/> <extension module="org.jboss.as.ejb3"/> <extension module="org.jboss.as.jaxrs"/> <extension module="org.jboss.as.jdr"/> <extension module="org.jboss.as.jmx"/> <extension module="org.jboss.as.jpa"/> <extension module="org.jboss.as.jsf"/> <extension module="org.jboss.as.logging"/> <extension module="org.jboss.as.mail"/> <extension module="org.jboss.as.naming"/> <extension module="org.jboss.as.pojo"/> <extension module="org.jboss.as.remoting"/> <extension module="org.jboss.as.sar"/> <extension module="org.jboss.as.security"/> <extension module="org.jboss.as.threads"/> <extension module="org.jboss.as.transactions"/> <extension module="org.jboss.as.web"/> <extension module="org.jboss.as.webservices"/> <extension module="org.jboss.as.weld"/> </extensions> 

另外一个可以certificateUnix的方法比用皮肤方法有更多的方法;)(为了可读性而做成多行,但可以转换回单行):

 $ FILE=/etc/passwd $ SEARCH4=daemon $ tail -n +$(grep -i $SEARCH4 -m 1 -n $FILE | cut -d: -f1) $FILE