#!/bin/sed -nf # # ae pessoal, # # estes dias precisei fazer um script para contar quantas vezes uma # determinada palavra aparecia em um texto. que eu saiba não tem nenhum # comando UNIX que te mostre isto, ou tem ?!. assim fiz um script. minha # primeira idéia foi este script. # # cat file | sed -n \ # /\b'"$1"'\b/{s/\b'"$1"'\b/¡/g;s/[^¡]//g;H;};${x;:a;s/\n//;ta;s/^[^¡]*\([¡]*\).$/\1/p;}'| # wc -c # # ou seja, substituimos a palavra por um caractere maluco, e adicionamos ele # no reserva. quando chegamos ao final do arquivo, pegamos do reserva, # deixamos só os caracteres maluco e contamos quantas vezes ele aparece (wc -c) # # Bom, funciona blz. mas após uma pesquisada na rede, descobri uma maneira de # incrementar um número usando substituição muito mais simples que alguns # métodos mirabolantes para fazer isto em sed que encontramos por aí :). # Então fiz este script para contar quantas vezes uma determinada palavra # aparece em um texto usando só sed. # se for a primeira linha zeramos o contador. # o contador fica sempre no reserva 1 { x s/^/0/ x } # se for a palavra que procuramos fizemos /\bsed\b/ { : c s/\bsed\b// t a # substituimos a palavra por nada, se ocorreu sucesso na substituição # pulamos pro label a, senão, vamos pro label b b b # chegamos aqui se ocorreu sucesso na substituição. Assim pegamos o valor # que esta no reserva e fizemos valor + 1 : a x # aqui comeca o algoritmo pra incrementar o numero : p s/9\(_*\)$/_\1/ t p s/^\(_*\)$/0\1/ s/ \(_*\)$/0\1/ s/8\(_*\)$/9\1/ s/7\(_*\)$/8\1/ s/6\(_*\)$/7\1/ s/5\(_*\)$/6\1/ s/4\(_*\)$/5\1/ s/3\(_*\)$/4\1/ s/2\(_*\)$/3\1/ s/1\(_*\)$/2\1/ s/0\(_*\)$/1\1/ s/_/0/g # como a palavra pode aparecer mais de 1x na mesma linha, pulamos pro label # c pra ver se existe mais x t c # aqui termina o algoritmo } : b # se for última linha, imprime o que tem no reserva (o contador) $ { x p } #Note que estamos usando borda no script (\b), assim se #procurarmos por sed e tiver sedsed, o resultado vai ser 0 #testando... # # $ echo xxxx | ./count.sed # 0 # $ echo sedxxxx | ./count.sed # 0 # $ echo xxx sed yyy | ./count.sed # 1 # $ echo -e "xxx sed yyy sed \n ttt sed" | ./count.sed # 3 # # PS: o link pro doc: # http://sed.sf.net/grabbag/scripts/incr_num.sed ### colorized by sedsed, a sed script debugger/indenter/tokenizer/HTMLizer