Então, eu sei que existem ferramentas para esse problema porque ouvi falar delas, mas não sei o que são.
Eu quero fazer algo como filtrar todos os dados, exceto os nomes de usuário em / etc / passwd.
Por exemplo, eu gostaria de pegar user1, user2 e user3 do arquivo a seguir. Nesse caso, a lógica poderia ser "Pegue o texto até o primeiro ':' em cada linha do arquivo".
user1:x:1:4
user2:x:2:5
user3:x:3:6
A saída seria:
user1
user2
user3
awk
pega um nome de arquivo, para que você possa pular o cachimbo e simplesmente fazerawk -F: '{print $1}' /etc/passwd
tr
eat
são alguns exemplos das poucas coisas que não funcionam).Aqui está um one-liner Perl:
fonte
Abaixo de perl e awk, há uma terceira ferramenta para esses trabalhos, que é sed:
Este é o comando de substituição: substitute from colon:, seguido por um ponto, que é um curinga para caracteres de qualquer tipo, de qualquer contagem (*), sem nada.
É (ubstitute) / FROM / TO / 'com TO vazio, o que significa' exclua tudo do primeiro (como sed é por padrão ganancioso) dois pontos (até o final da linha, pois sed funciona bem com linhas inteiras).
Claro que também
cut
é um bom comando, mas eu diria de uma família diferente.fonte
No seu exemplo, todos os três nomes têm o mesmo comprimento. Nesses casos - o que pode acontecer, mas não tão provável com / etc / passwd - você também pode usar o colrm:
ou, claro
(um caso raro em
useless use of cat
que não se aplica, porque você não pode colocar um FILE à mão para atuar como parâmetro.)fonte
cat
ainda é inútil lá:colrm 6 < FILE
.cat foo | grep bar
.Apenas para completar, não há necessidade de comandos externos, o shell (Bourne shell ou compatível) pode lidar sozinho:
Obviamente, essa é provavelmente a mais lenta de todas as soluções possíveis; portanto, para arquivos grandes, escolha outra.
fonte