我目前有以下命令
wget -O - -q http_url_goes_here |
grep -Eci '(cart|shop|buy|order|store|shipping|products|price)'
它为我提供了网站上以下每个关键字的所有出现次数(cart|shop|buy|order|store|shipping|products|price)
。
我遇到的问题是,如果某些单词出现多次,计数会高达 200。我想获得 0 到 8 之间的计数,这表明在网站上找到了多少个关键字。正如每个关键字的计数最多应增加 1 一样。
我感谢您的帮助。
答案1
使用 GNU grep:
wget -O - -q http_url_goes_here |
grep -wEoi 'cart|shop|buy|order|store|shipping|products|price' |
sort -fu | wc -l
我将其添加-w
到您的grep
命令中,以便您不会将主教等算作商店的命中。
答案2
POSIXly:
tr -cs '[:alnum:]_' '[\n*]' | grep -xiF 'cart
shop
buy
order
store
shipping
products
price' | sort -fu | wc -l
您还可以在文件中包含单词列表并使用:
tr -cs '[:alnum:]_' '[\n*]' | grep -xiFf word.list | sort -fu | wc -l
您可以通过执行以下操作来提高效率:
tr -cs '[:alnum:]_' '[\n*]' | awk -v o=0 '
{$0=tolower($0)}
NR==FNR{a[$0];n++;next}
{
for (i in a) if ($0 == i) {
if (++o == n) exit
delete a[i]
}
}
END {print o}' word.list -
答案3
沃尔克·西格尔的回答非常有用。但是,如果您希望输出是0
和之间的数字,8
您应该添加一个grep
来计算行数。
$ wget -O - -q ix.de | grep -Eoi '(cart|shop|buy|order|store|shipping|products|price)' | sort -i | uniq -i | grep -c ''
2
-c
请注意,现在的标志uniq
不是必需的。