grep的-c无法识别参数

问题描述:

我有一个输出文件,这看起来是这样的:grep的-c无法识别参数

[email protected] 
[email protected] 
[email protected] 

我想找出与grep,该value2出现了多少次,所以我“M这样做:

n = grep -c 'value2' outputfile.tmp 

if[$n!=6] ; then 

但是当我运行它,控制台这样说:

`"-c: command not found"` 

就像它不识别参数。

您需要使用$()来包围命令将其设置为一个变量:

n=$(grep -c 'value2' outputfile.tmp) 

这是一种命令替换的,看到附近的这个页面的底部:http://www.tldp.org/LDP/abs/html/commandsub.html

这应该已经用空格阻止了赋值n =:Bash参数赋值不能有空格。其次,将一个命令的输出分配给一个参数,你必须使用command substitution

n=$(grep -c 'value2' outputfile.tmp) 

注意,这会告诉你有多少线包含至少出现一次value2,而不是实际数量为value2。试想一下:

$ grep -c 'value2' <<< 'value2value2' 
1 

如果你知道,只会有一个value2每行(或要计算行),我们是很好的。如果你要计算的出现,你必须使用类似

n=$(grep -o 'value2' outputfile.tmp | wc -l) 

grep -o打印在单独的行每场比赛,并wc -l计数线。

现在,要检查$n的值是否不等于六,请使用条件。与作业不同,此必须有有空格。

!=比较用于字符串比较;为整数,你应该使用-ne( “不等于”):

if [ "$n" -ne 6 ]; then 

取而代之的是测试命令[ ]的,Bash有更灵活的[[ ]]条件epxression:

if [[ "$n" -ne 6 ]]; then 

其中引用不严格必要(但不伤害!)。

或者,我们可以使用一个算术表达式:

if ((n != 6)); then 

其中任何参数而没有预先考虑$评价。