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/' fileMesma ideia. A opção
-afaz com queperldivida seus campos de entrada no valor fornecido por-Fna matriz@F. Em seguida, imprimimos se o quarto elemento (campo) da matriz (matrizes começa a contar em 0) começa com5. -
grepgrep -E '^([^|]*\|){3}5' fileA regex corresponderá a uma string de não
|seguida por|3 vezes e, em seguida, a5. -
GNU ou BSD
sedsed -En '/([^|]*\|){3}5/p' fileO
-Eativa as expressões regulares estendidas e o-nsuprime a saída normal. O regex é o mesmo que ogrepacima e opno final faz com quesedimprima apenas linhas correspondentes à regex.