A abordagem mais simples provavelmente seria awk
:
awk -F'|' '$4~/^5/' file
O -F'|'
define o separador de campo como |
. O $4~/^5/
será verdadeiro se o quarto campo começar com 5
. A ação padrão para awk
quando algo é avaliado como true é imprimir a linha atual, portanto, o script acima imprimirá o que você deseja.
Outras opções são:
-
Perl
perl -F'\|' -ane 'print if $F[3]=~/^5/' file
Mesma ideia. A opção
-a
faz com queperl
divida seus campos de entrada no valor fornecido por-F
na matriz@F
. Em seguida, imprimimos se o quarto elemento (campo) da matriz (matrizes começa a contar em 0) começa com5
. -
grep
grep -E '^([^|]*\|){3}5' file
A regex corresponderá a uma string de não
|
seguida por|
3 vezes e, em seguida, a5
. -
GNU ou BSD
sed
sed -En '/([^|]*\|){3}5/p' file
O
-E
ativa as expressões regulares estendidas e o-n
suprime a saída normal. O regex é o mesmo que ogrep
acima e op
no final faz com quesed
imprima apenas linhas correspondentes à regex.