expressões regulares com grep

2

Eu tenho este comando aqui:

grep -B10 -A10 '14:14:50 {"channels":["/alerts/6979/new"],"data":"New alerts for unit 6979"}' mygateway.log

Em vez de procurar por 14:14:50, gostaria que os 50 fossem substituídos por qualquer número. Então eu estava pensando em usar o "." para representar qualquer caractere em uma expressão regular. No entanto, nas linguagens de programação, você geralmente significa um regex com algo como \ abc.xyz \ onde "." poderia ser qualquer caractere e qualquer número de caracteres. Mas quando eu uso "." nessa sequência do grep acima, isso não me dá nada de volta.

    
por JohnMerlino 15.09.2013 / 21:32

2 respostas

4

O problema aqui é que . é usado para indicar qualquer caractere único . Portanto, o . corresponderia ao 5 em 50 , mas, sem nada que corresponda ao 0 , o restante da linha não corresponderá. Em qualquer caso, desde que você saiba que o que você está procurando é qualquer número , você deve ser mais específico com o seu regex. Corresponder qualquer número com:

[0-9]\+

Se você sabe que esse número pode ter uma parte fracionária opcional (depois de um ponto decimal), você pode usar o seguinte:

[0-9]\+\(\.[0-9]\+\)?

A barra invertida antes do + e dos parens deve ser omitida se você estiver usando a opção grep % PC_de% (PCRE).

Se você planeja usar a opção -P , deve saber que ela não está no padrão POSIX e pode não estar disponível em todas as plataformas.

    
por 15.09.2013 / 21:34
1

Você também pode usar o sinalizador -P para habilitar expressões regulares compatíveis com Perl e usar \d :

grep -P -B10 -A10 '14:14:\d+ {"channels":["/alerts/6979/new"],"data":"New alerts for unit 6979"}' mygateway.log

Você também pode realmente simplificá-lo, tornando-o menos restritivo (os detalhes dependem dos dados de entrada, é claro, mas isso deve funcionar):

grep -P -B10 -A10 '14:14:\d+.*channels.*alerts/6979/new.*data.*New' mygateway.log

Estou assumindo que, se a linha corresponder a ambos os /alerts/6979/new/ e New , o restante será imutável.

    
por 15.09.2013 / 21:41