来自unix korn shell脚本的匹配单词,模式或值的计数仅返回1作为计数

时间:2016-08-10 21:34:08

标签: shell unix count grep

我正在尝试从变量中获取匹配模式的计数来检查它的计数,但它只返回1作为结果,这是我正在尝试做的事情:

x="HELLO|THIS|IS|TEST"
echo $x | grep -c "|"

预期结果:3

实际结果:1

你知道为什么返回1而不是3?

感谢。

5 个答案:

答案 0 :(得分:4)

grep -c计算一行内不匹配的行。

您可以使用awk获取计数:

x="HELLO|THIS|IS|TEST"

echo "$x" | awk -F '|' '{print NF-1}'

3

另外,您可以使用trwc

echo "$x" | tr -dc '|' | wc -c

3

答案 1 :(得分:0)

$ echo "$x" | grep -o '|' | grep -c .
3

grep -c不计算匹配数。它计算匹配的的数量。通过使用grep -o,我们将匹配放在不同的行上。

这种方法适用于多行:

$ cat file
hello|this|is
a|test
$ grep -o '|' file | grep -c .
3

答案 2 :(得分:0)

grep手册说:

  

grep,egrep,fgrep - 打印匹配模式

-c标志:

  

而是为每个输入文件打印匹配的计数

并且只有一个匹配

答案 3 :(得分:0)

试试这个:

$ x="HELLO|THIS|IS|TEST"; echo -n "$x" | sed 's/[^|]//g' | wc -c
3

只有一个的管道:

echo "$x" |
  perl -lne 'print scalar(() = /\|/g)'

答案 4 :(得分:0)

您不需要grep

pipe_only=${x//[^|]}  # remove everything except | from the value of x
echo "${#pipe_only}"  # output the length of pipe_only