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.cutusa 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 .