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

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

所以,也许我应该用grep这个。只要我需要递归搜索,我就应该使用grep -r.但我不知道接下来我应该做什么;)

我怎样才能做到这一点?

答案1

使用grep支持-r(递归)和-P(PCRE)选项的 s(或pcregrep使用-r):

grep -rP '^(?=.{101}).*?if' .

或者 POSIXly:

find . -type f -exec awk 'length > 100 && /if/ {
   print FILENAME ": " $0}' {} +

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

答案2

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

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

答案3

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

grep -r '.\{100\}' /path | grep 'if'

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

答案4

与一个grep

grep -vxE '.{0,99}|([^i]|i[^f])*i*' <in >out

只会选择无法用任一语句从头到尾描述的行。因此,任何可以被描述为由 0 到 99 个字符组成的行都不会被选择,同样,任何匹配超过 99 个字符但仍然不包含至少一个字符的行如果也会被选中失败。

printf '^%-100b$\n' 'if\nif' 'hey if' i if |
grep -nvxE '.{0,99}|([^i]|i[^f])*i*'

3:^hey if                                                                                              $
5:^if                                                                                                  $

不过,使用两个greps 可能会更好。

相关内容