현재 다음 명령이 있습니다
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
POSIX적으로:
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
Volker Siegel의 답변은 매우 유용합니다. 그러나 출력이 0
과 사이의 숫자가 되도록 하려면 1을 추가 하여 행 수를 계산 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
필요하지 않습니다.