Uma maneira que não requer "curingas" ou expressões regulares é usar cut
. cut
pode lidar com linhas separadas por caracteres designados em arquivos de texto, o que /etc/passwd
simplesmente é.
cut -d: -f1,3,4 /etc/passwd
A saída terá campos delimitados por dois pontos. Parece que o GNU cut
tem uma opção extra, "--output-delimiter", mas você também pode usar tr
:
cut -d: -f1,3,4 /etc/passwd | tr ':' '\t'
As opções para cut
funcionam assim:
-
-d:
- use um caractere de dois-pontos como um separador de campo. O padrão é a guia. -
-f1,3,4
- campos de saída número 1, 3 e 4.cut
usa campos indexados 1, começando no lado esquerdo da linha. O campo 2 seria o 'x', onde a senha criptografada apareceu no passado.
O comando awk
também pode funcionar:
awk -F : '{print $1, $3, $3}' /etc/passwd
A opção -F :
informa awk
para usar dois pontos em campos separados. awk
refere-se a campos em uma linha como $ 1, $ 2, $ 3 ... da esquerda para a direita. $ 0 armazena toda a linha, que geralmente é o que você deseja imprimir, mas não desta vez.
sed
pode ser feito para fazer isso:
sed 's/^\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):..*/ /' /etc/passwd
No comando sed
, finalmente chegamos aos "curingas", embora eles pareçam feios neste caso.
Meu conselho seria preferir o comando cut
. O exemplo sed
mostra que uma expressão regular para obter o que você deseja pode ser feia e, portanto, complicada de se tornar correta. awk
pode fazer mais do que cut
, em que awk
usa execuções de espaço em branco para separar os tokens por padrão. Isso pode economizar tempo com a especificação do separador de campo cut
.