如何在不计算 bash 中的复合词的情况下计算单词的频率?

How to count frequency of a word without counting compound words in bash?

我正在使用它来计算使用 bash 的文本文件中的频率。

grep -ow -i "and" | wc -l

它计算文件中的所有 ,包括那些属于复合词的部分,例如 jerry-and-jeorge。这些我希望忽略并计算所有其他独立 and.

使用 GNU grep,您可以使用以下命令来计算 and 个没有用连字符括起来的单词:

grep -ioP '\b(?<!-)and\b(?!-)' "" | wc -l

详情:

  • P 选项启用 PCRE 正则表达式语法
  • \b(?<!-)and\b(?!-) 匹配
    • \b - 单词边界
    • (?<!-) - 如果当前位置的左侧有一个连字符,则匹配失败的负后视
    • and - 固定字符串
    • \b - 单词边界
    • (?!-) - 如果当前位置右侧紧邻连字符,则匹配失败的否定前瞻。

参见online demo

#!/bin/bash
s='jerry-and-jeorge, and, aNd, And.'
grep -ioP '\b(?<!-)and\b(?!-)' <<< "$s" | wc -l
# => 3 (not 4)