例如我的输入是12451
.我需要获取1
数字中重复的次数。
答案1
使用 GNU grep
:
$ echo 12451 | grep -o . | grep -c 1
2
使用 GNU awk
:
$ echo 12451 | gawk -v num=1 'BEGIN { FS = "" } {for (i = 1; i <= NF; i++) if ($i == $num) count++ } END {print $count}'
2
使用 POSIX awk 作为在此评论中建议:
$ echo 12451 | awk '{print gsub(/1/,"")}'
2
答案2
和zsh
:
$ string=12451
$ echo ${#string//[^1]}
2
答案3
假设数据到达标准输入(例如通过管道传输echo
):
LC_ALL=C tr -d -c '1' | LC_ALL=C wc -c
这会删除所有不存在的字符1
,然后计算剩余的字符。
假设数据保存在 shell 变量 中,value
例如bash
:
ones=${value//[\!1]/}; echo "${#ones}"
这实际上与第一个命令执行相同的操作。它删除1
值中的所有非字符$value
,将结果字符串分配给新变量ones
,并输出该字符串的长度。
答案4
这是另一种使用 grep 和使用 wc 进行行计数的方法:
grep -o '1' <<< 12451 | wc -l