大家好,我想计算这个 URL 中以 's' 结尾的单词数量,
https://matt.might.net/articles/what-cs-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 -dump
或lynx -nolist
。
然后我们在其中查找一个或多个单词字符的序列(单词字符是数字或下划线),s
如果后面没有单词字符,则后跟 ,然后用 进行计数wc -l
。
本质上,单词的定义是由 2 个或更多的数字或下划线字符组成的序列,我们查找以 结尾的字符s
(添加一个-i
选项以grep
查找以 结尾的字符S
)。这意味着s
init's
例如不被计算在内。如果你想考虑单字母单词,你可以+
用*
上面替换。或者只是这样做grep -Po 's\b'
,但省略后您将无法看到单词列表| wc -l
。
另一种方法是首先提取单词并找到以 结尾的单词s
:
grep -Eo '\w+' | grep -c 's$'
无论如何,这是一个相当粗略的定义单词仅适用于简单的英文文本。当应用于其他语言的文本时,您可能会遇到问题。例如,如果波兰语单词以分解的 U+0301 形式编码(其中 U+0301 是组合锐音重音),它将在abrogowałybyście
波兰语单词(在单词列表中随机选取)中找到匹配项,因为这将被视为不是后面跟着一个单词字符。ś
s
s
您可能还想考虑如何处理S
inUSA
或U.S.A.
。