在vi编辑器中找到匹配模式后显示前5行

时间:2014-02-20 10:22:38

标签: linux search vi

我想在vi编辑器中看到first 5 lines after the match found。命令是什么?

我只知道这些命令

/Incident Id: 从头到尾提供所有行

:g/Incident ID: 仅提供隐藏所有不匹配的匹配字

但是如何在找到匹配词之后显示前5行...?


带有预期输出的

示例

我有8行文字,&我搜索事件ID

    Incident ID: 1392875740716  <<<Match word here
    URL: /Project/jsps/ErrorPage.jsp
    java.lang.NullPointerException
            at java.util.Calendar.setTime(Calendar.java:1092)
            at com.cando.restaurant.utils.DateRange.createForWeek(DateRange.java:54)
            at org.springframework.transaction.interceptor.TransactionInterceptor :110)
            at org.springframework.aop.framework.ReflectiveMethodInvocation 
            at org.springframework.aop.interceptor.ExposeInvocationInterceptor 

预期输出

  Incident ID: 1392875740716  <<<Match word here
    URL: /Project/jsps/ErrorPage.jsp
    java.lang.NullPointerException
            at java.util.Calendar.setTime(Calendar.java:1092)
            at com.cando.restaurant.utils.DateRange.createForWeek(DateRange.java:54)

3 个答案:

答案 0 :(得分:8)

试试这个

:g/Incident ID/#5

另请参阅:help :g:help :p:help :z(如果您有vim,而不是vi)。

答案 1 :(得分:2)

我不确定你的意思是“匹配后只有前5行”,因为vi会显示整个文件。

如果您只想看到此输出,可以使用grep而不是vi

$ grep -A 5 'Incident Id:' <your input file>

答案 2 :(得分:0)

虽然它不是特定的vim命令,但您可以在vim编辑器的任何文件上尝试它。 Vim还允许您直接从编辑器执行命令,而无需通过使用bang(!)后跟要运行的命令来删除shell。所以:

:!grep -A 5 "Incident ID" filename.txt

来自grep man pages:

  

-A NUM, - after-context = NUM                 匹配行后打印NUM行尾随上下文。放置一行包含 - 在连续的组之间   匹配。

     

-B NUM, - before-context = NUM                 在匹配行之前打印NUM行前导上下文。放置一行包含 - 在连续的组之间   匹配。