首页 > 解决方案 > BASH:搜索字符串并准确显示子字符串在其中出现的确切次数

问题描述

我已经搜索了所有内容,但仍然找不到这个简单的答案。我敢肯定它很容易。如果您知道如何完成此操作,请提供帮助。

sample.txt 是:

AAAAA

我想找到组合“AAA”发生的确切时间。如果你只是使用例如

grep -o 'AAA' sample.txt | wc -l

我们收到 1。这与使用标准文本编辑器搜索框类型搜索仅搜索 AAA 发生的次数相同。但是,我想要完全匹配的完整数量,从每个恰好为 3 的单个字符开始。当我们从每个字符单独搜索而不是将每个 AAA 命中视为盒子类型块时,我们会得到这个。

我正在寻找从 sample.txt 中“AAA”的每个单独字符开始的最压缩/最多可能性/字面确切的出现次数,而不仅仅是像在普通文本编辑器类型搜索中那样找到它的每次块从搜索框中。

我们如何做到这一点,最好是在 AWK 中?SED、GREP 和其他任何东西都可以,我可以将它们包含在 Bash 脚本中。

标签: regexbashsearchawksed

解决方案


这可能对你有用(GNU sed & wc):

sed -r 's/^[^A]*(AA?[^A]+)*AAA/AAA\nAA/;/^AAA/P;D' | wc -l

丢失除A's 之外的任何字符,以及单或双A's。然后打印三元组A并丢失第一个A并重复。最后计算打印的行数。


推荐阅读