Você pode usar awk
em vez de grep
:
awk '/pattern/ {last = NR; count++}
END {printf "Last: %s\nCount: %d\n", last, count}' < file
Tenha em atenção que os padrões awk
são expressões regulares estendidas (com pequenas diferenças com grep -E
as barras wrt backslash).
Você também pode usar apenas uma invocação de awk
para todos os seus padrões:
awk '!patterns_finished{patterns[$0]; next}
{
for (p in patterns) if ($0 ~ p) {
last[p] = NR
count[p]++
}
}
END {
for (p in patterns)
printf "%s: count=%d last=%s\n", count[p], last[p]
}' patterns.txt patterns_finished=1 file
(assumindo patterns.txt
contém a lista de padrões, um por linha).