使用 Bash 计算以特定字符结尾的单词数量

使用 Bash 计算以特定字符结尾的单词数量

大家好,我想计算这个 URL 中以 's' 结尾的单词数量,

https://matt.might.net/articles/what-c​​s-majors-should-know/

这就是我所做的

curl https://matt.might.net/articles/what-cs-majors-should-know/ | \
grep s$ 

我找不到一种方法来过滤掉以 's' 结尾的单词并对其进行计数

答案1

elinks -no-numbering -no-references -dump https://matt.might.net/articles/what-cs-majors-should-know/ |
  grep -Po '\w+s\b' |
  wc -l

(使用 GNUgrep或兼容)

给我:595

elinks检索 HTML 并以自己的方式将其转换为文本。一些替代方案是w3m -dumplynx -nolist

然后我们在其中查找一个或多个单词字符的序列(单词字符是数字或下划线),s如果后面没有单词字符,则后跟 ,然后用 进行计数wc -l

本质上,单词的定义是由 2 个或更多的数字或下划线字符组成的序列,我们查找以 结尾的字符s(添加一个-i选项以grep查找以 结尾的字符S)。这意味着sinit's例如不被计算在内。如果你想考虑单字母单词,你可以+*上面替换。或者只是这样做grep -Po 's\b',但省略后您将无法看到单词列表| wc -l

另一种方法是首先提取单词并找到以 结尾的单词s

grep -Eo '\w+' | grep -c 's$'

无论如何,这是一个相当粗略的定义单词仅适用于简单的英文文本。当应用于其他语言的文本时,您可能会遇到问题。例如,如果波兰语单词以分解的 U+0301 形式编码(其中 U+0301 是组合锐音重音),它将在abrogowałybyście波兰语单词(在单词列表中随机选取)中找到匹配项,因为这将被视为不是后面跟着一个单词字符。śss

您可能还想考虑如何处理SinUSAU.S.A.

相关内容