Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 计算特定正则表达式在多个文件上出现的次数_Bash - Fatal编程技术网

Bash 计算特定正则表达式在多个文件上出现的次数

Bash 计算特定正则表达式在多个文件上出现的次数,bash,Bash,我试图编写一个bash脚本来计算特定模式与文件列表匹配的次数 我在谷歌上搜索过解决方案,但我只找到了单个文件的解决方案 我知道我可以使用egrep-o模式文件,但如何将其归纳为文件列表并在最后计算出总和 编辑:添加我尝试编写的脚本: #! /bin/bash egrep -o -c "\s*assert.*;" $1 | awk -F: '{sum+=$2} END{print sum}' 直接在命令行上运行egrep可以正常工作,但在bash脚本中则不行。我必须特别保护正则表达式吗?您可以

我试图编写一个bash脚本来计算特定模式与文件列表匹配的次数

我在谷歌上搜索过解决方案,但我只找到了单个文件的解决方案

我知道我可以使用
egrep-o模式文件
,但如何将其归纳为文件列表并在最后计算出总和

编辑:添加我尝试编写的脚本:

#! /bin/bash

egrep -o -c "\s*assert.*;" $1 | awk -F: '{sum+=$2} END{print sum}'

直接在命令行上运行egrep可以正常工作,但在bash脚本中则不行。我必须特别保护正则表达式吗?

您可以使用
grep-c
对每个文件中的匹配项进行计数,然后在末尾使用
awk
对计数进行汇总,例如:

grep -c PATTERN * | awk -F: '{sum+=$2} END{print sum}'

您可以使用
grep-c
对每个文件中的匹配项进行计数,然后在末尾使用
awk
对计数进行汇总,例如:

grep -c PATTERN * | awk -F: '{sum+=$2} END{print sum}'
grep-o文件1[file2...*]|
uniq-c
如果您只想要总数:

grep -o <pattern> file1 [file2 .. | *] | wc -l
grep-o文件1[file2...*]wc-l
编辑:排序似乎没有必要。

grep-o file1[file2...*]|
uniq-c
如果您只想要总数:

grep -o <pattern> file1 [file2 .. | *] | wc -l
grep-o文件1[file2...*]wc-l

编辑:排序似乎是不必要的。

接受的答案有一个问题,即
grep
将计为1,即使模式可能在一行上出现多次。此外,一个命令就可以完成这项工作

awk 'BEGIN{RS="\0777";FS="PATTERN"} { print NF-1 } ' file

接受的答案有一个问题,即即使模式在一行上出现多次,grep仍将计为1。此外,一个命令就可以完成这项工作

awk 'BEGIN{RS="\0777";FS="PATTERN"} { print NF-1 } ' file

我担心这个要求太特殊了,你必须明确地去做。我担心这个要求太特殊了,你必须明确地去做。我从来没有使用过
awk
,这似乎是一个很好的小东西。我想把它放到bash脚本中,但它不起作用,它总是返回
0
。请看上面的脚本。@TiagoVeloso:grep-c模式打印出来的是什么?它应该是
file:count
,每个输入文件一行。它是这样工作的,只有当我将命令放在脚本文件上时问题才会出现。@TiagoVeloso:如果从脚本中删除
|awk-F:'{sum+=$2}END{print sum}'
?它会打印出你期望的文件名和计数吗?我知道问题所在。问题是,
$1
只扩展到一个文件,而不是所有文件。你知道解决这个问题的方法吗?我从来没有用过awk,它看起来是个漂亮的小东西。我想把它放到bash脚本中,但它不起作用,它总是返回
0
。请看上面的脚本。@TiagoVeloso:grep-c模式打印出来的是什么?它应该是
file:count
,每个输入文件一行。它是这样工作的,只有当我将命令放在脚本文件上时问题才会出现。@TiagoVeloso:如果从脚本中删除
|awk-F:'{sum+=$2}END{print sum}'
?它会打印出你期望的文件名和计数吗?我知道问题所在。问题是,
$1
只扩展到一个文件,而不是所有文件。你知道解决这个问题的办法吗?