Solução de Perl:
perl -ne 'print if tr/,// > 4'
-
-n
lê o arquivo linha por linha - o operador tr retorna o número de correspondências.
Para imprimir as linhas com menos de 4, basta alterar >
para <
.
Gostaria de saber qual é a melhor maneira de obter linhas de texto com mais do que um número específico de caracteres especiais.
Digamos que você já saiba que cada linha tem 4 vírgula ,
e gostaria de ter linhas que tenham mais de 4 vírgulas ,
Exemplo
hi,hello,how,are,you
catch,me,then,say,hello,then
Resultado
catch,me,then,say,hello,then
Solução de Perl:
perl -ne 'print if tr/,// > 4'
-n
lê o arquivo linha por linha Para imprimir as linhas com menos de 4, basta alterar >
para <
.
Usando o comando grep
:
grep -E '(,.*){5,}' myfile
faz o trabalho. Explicação:
-E
: use um Regex estendido ...
'(,.*)
: ... para encontrar uma vírgula seguida por qualquer número de caracteres, até zero ...
{5,}'
: ... e repita o padrão anterior 5 vezes ou mais.
Se você deseja grep linhas com menos de 4 vírgulas, substitua {5,}'
por {0,3}'
.
A versão awk
:
awk -F, 'NF > 5' myfile
Resultado obtido abaixo de um revestimento
l='awk 'BEGIN{print }{print gsub(",","")}' example.txt |sed '/^$/d' |awk '$1 > 4 {print NR}'';sed -n ''$l'p' example.txt
output
catch,me,then,say,hello,then
Tags awk sed linux regular-expression