在Grep中跳过行

  • 本文关键字:Grep bash awk grep
  • 更新时间 :
  • 英文 :


我在windows上使用grep在文件中搜索重复的字符串。我让它或多或少地发挥作用。

我正在用一些IP地址更新一个大批量文件。当我在文件中添加新位置时,有时T1 IP地址不可用,因此该位置的T1 IP为null。因此,我会定期查看列表以更新它们。

我搜索SET T1为空的行。这返回了那些特定的行,所以我添加了-BX以返回站点号所在的X行。这给了我一个文本块,其中包括站点号和null的IP。欢呼进步。

然而,我想进一步过滤,最好只是得到网站号码。

因此,与其得到这个:

:S001
Text I want to skip here
More text here
SET T1=null
--
:S010

我可以得到这个:

:S001
--
:S010

总之,我想找到一个匹配项,然后返回X行,将该行输出到一个文件中,然后转到下一个匹配,重复。

我怀疑我可以通过发呆来实现这一点,但遗憾的是,我的怪癖早已离开了我,所以我不知所措。

您的扩展需求正朝着sedawk(或Perl、Python…,尽管awk在这里很好)的方向发展;CCD_ 4不再合适。

awk '/^:S.*/ { site = $1; next } /SET T1=null/ { print site }'

捕获以:S开头的行(根据需要进行更严格的处理——例如,/^:S[0-9]{3}$/可能只查找包含:S和3位数字的行),并将名称保留在变量site中。当遇到SET T1=null行时,打印site的当前值——最近遇到的站点名称。如果您的输入数据比预期的要小,您可以根据需要添加一些提示,使其更加健壮。在本例中,您可以省略next;这是一个小的优化。

@Jonathan Leffler好的,谢谢乔纳森让我走上了正确的道路。

我只要稍微调整一下就能得到我想要的东西。主要是因为我在Windows上使用GNUwin32软件包,而不是在linux/unix上。

C:Program FilesGnuWin32bin>gawk "/^:S.*/ { site = $1; next } /SET T1=null/ { print site }" c:file.txt >c:match.txt

相关内容

  • 没有找到相关文章

最新更新