Sugiro:
grep '^[^,]*,[^,]*,[^,]*$' file | grep -v 'specificstring'
Precisa filtrar e mostrar linhas de log, se a linha contiver exatamente 2 vírgulas e não contiver uma string específica. Qual comando do linux eu preciso usar, awk
, grep
, qual é a expressão?
Para segunda condição eu uso isso:
awk '!/specificstring/' ./log/file/path
Duas checagens de vírgulas eu não sei como colocar. Normalmente, a linha é assim:
arbitrary,arbitrary,arbitrary,arbitrary
arbitrary,arbitrary,arbitrary
Precisa do segundo tipo de linha.
Tentei algo assim:
grep -P '[^,]+[,][^,]+[,][^,]+[,]"specificstring"[^,]+' ./log/file/path
Como excluir "specificstring"?
Isso pode ser feito em uma passagem com awk
, combinando as duas condições:
awk '/^[^,]*,[^,]*,[^,]*$/ && !/specificstring/' ./log/file/path
O mesmo pode ser alcançado em perl
com um comando quase idêntico:
perl -lane 'print if /^[^,]*,[^,]*,[^,]*$/ && !/specificstring/' ./log/file/path
Para responder à pergunta em seu sentido mais genérico, ou seja, filtra linhas se um número arbitrário de ocorrências de string for encontrado :
perl -lane '@m = /,/g; print if scalar @m == 2 and !/specificstring/' ./log/file/path