我有一个看起来像这样的字符串:
STRING="$PATTERN_some-stuff_$PATTERN_some-other_stuff"
Run Code Online (Sandbox Code Playgroud)
我想仅使用 Bash 内置命令来计算其中出现的次数$PATTERN。
到目前为止,我发现的更直接的方法是从字符串中仅提取匹配的字符串$PATTERN,然后计算$PATTERN新创建的字符串中出现了多少次,按以下方式进行:
expr length "${STRING//[^$PATTERN]}" / ${#PATTERN}
Run Code Online (Sandbox Code Playgroud)
但它仅适用于$PATTERN单个字符。我尝试使用语法${STRING//!(PATTERN)}",如果我很好地理解 Bash 手册,它只会匹配$PATTERN排除其余部分的情况$STRING,但它实际上什么也不输出。那么,我哪里错了?
如果您只对内置函数有点灵活,那么这是一个完美的情况grep -o:
$ STRING='$PATTERN_some-stuff_$PATTERN_some-other_stuff'
$ grep -o '$PATTERN' <<< "$STRING" | wc -l
2
Run Code Online (Sandbox Code Playgroud)