计算给定行范围内包含子字符串的行数

Counting num of lines containing substring within a given range of lines

我试图在给定的行范围内查找文件中包含子字符串的行数。例如。最后 100 行,第 1 行到第 5 行等

目前我正在尝试做的范围:

sed -n '1,5p' >> file.csv grep -c *"substring"* file.csv

这里</code>是原文件。我正在创建一个临时文件并将它们存储在那里。有一个更好的方法吗?因为我不确定这是否正常工作。</p> <p>至于最后n行,我在做:</p> <p><code>(tail -n 100 ) | grep -ic *"substring"*这似乎不起作用。

想知道我哪里出错了吗?对于案例 sensitive/insensitive 场景,我将如何修改它。

您可以使用管道代替临时文件。 "" 外的 '*' 将匹配当前目录中的文件,这可能不是您想要的,因为 grep 已经可以在字符串中匹配,只需执行以下操作:

sed -n '1,5p' "" | grep -c "substring"

或者,使用 sed 过滤数据并使用 wc -l 计算行数:

sed -n '1,5 { /substring/p }' "" | wc-l

关于您的第一个问题,我认为您不需要创建临时文件并将结果通过管道传输到 grep:

sed -n '1,5p'  | grep -c "substring"

第二个问题,您可以在上面的答案中看到,您不应该在 grep 子字符串规范中使用星号。这不是必需的,因为 grep 总是匹配行中任何位置的子字符串,并且将它们放在您放置它们的位置会导致 bash 通配。

使用此 Perl 单行代码计算文件 </code> 中模式 <code>substring 的出现次数,第 1-5 行:

perl -ne 'print if $. >= 1 && $. <= 5 && /substring/' "" | wc -l

对于不区分大小写的搜索,将 i 修饰符添加到正则表达式中:

perl -ne 'print if $. >= 1 && $. <= 5 && /substring/i' "" | wc -l

Perl 单行代码使用这些命令行标志:
-e : 告诉 Perl 查找内联代码,而不是在文件中。
-n :一次循环输入一行,默认分配给 $_

$. : 当前输入行号。

另请参见:
perldoc perlrun: how to execute the Perl interpreter: command line switches
perldoc perlre: Perl regular expressions (regexes)