如何查找包含超过 100 个字符并包含“if”的行?

pus*_*pop 8 grep shell-script text-processing regular-expression

所以,可能我应该用grep这个。只要我需要递归搜索,我就应该使用grep -r. 但后来我不知道接下来我该怎么办 ;)

我怎样才能做到这一点?

Sté*_*las 14

使用greps 支持-r(recursive) 和-P(PCRE) 选项(或pcregrepwith -r):

grep -rP '^(?=.{101}).*?if' .
Run Code Online (Sandbox Code Playgroud)

或者POSIXly:

find . -type f -exec awk 'length > 100 && /if/ {
   print FILENAME ": " $0}' {} +
Run Code Online (Sandbox Code Playgroud)

(请注意,对于非文本文件(包含非字符、零字节值、太长的行或最后一个换行符之后的数据的文件)的实现之间的行为会有所不同。另请注意,某些grep实现将在非常规文件中搜索或将遵循符号链接)。


Dan*_*i_l 12

使用 awk 计算 $0 的大小和是否存在子字符串?
awk '( length($0) > 100 && index($0,"if") ){print}' file

如果“if”应该是一个词(而不是一个简单的子字符串),你可以使用 awk '( length($0) > 100 && match($0,/\<if\>/) ){print}' file

  • 用 `awk` 编写它的惯用方式更像是 `awk 'length &gt; 100 &amp;&amp; /if/' file`。请注意,对于 `/\&lt;if\&gt;/`,您需要 GNU `awk`。 (6认同)

cho*_*oba 8

您可以使用由管道连接的两个 grep:

grep -r '.\{100\}' /path | grep 'if'
Run Code Online (Sandbox Code Playgroud)

要排除if在其路径或名称中包含的文件,请使用':.*if'而不是'if'(如果您的文件名或路径包含冒号,仍然可能会中断)。

  • 请注意,它可以报告路径中包含“if”的文件中的所有 100 个字符行 (4认同)