如何在不计算 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)
我正在使用它来计算使用 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)