Complementando IFS=" " for i in `cat usuarios.txt` do user=`cut -d";" -f1 <<< $i` nc=`cut -d";" -f2 <<< $i` cat grupos.txt|sed "s/$user/$nc/" > temp.txt cat temp.txt > grupos.txt echo done rm temp.txt
Obs. Tem um parâmetro do sed que joga a saída no mesmo arquivo de entrada, mas não recordo agora e na pesquisa rápida que fiz na lista não encontrei. 2008/8/13 César Vianna <[EMAIL PROTECTED]> > Segue uma sugestão: > > Formato do arquivo usuarios.txt > > x;Nome Completo > > > Formato do arquivo grupos.txt > > grupo:x:y > > > Script para substituição: > > ######## > IFS=" > " > for i in `cat usuarios.txt` > do > user=`cut -d";" -f1 <<< $i` > nc=`cut -d";" -f2 <<< $i` #nc é o nome completo > echo $user - $nc > cat grupos.txt|sed "s/$user/$nc/" > done > ######## > > > > > > > 2008/8/13 Anderson - Listas <[EMAIL PROTECTED]> > > Pessoal, estou precisando de uma ajuda com um pequeno script que estou >> montando. >> >> Não é algo complicado de se fazer, mas algo que com pouco experiência >> não estou conseguindo. >> >> Vamos ao problema: >> >> Tenho dois arquivos: >> >> grupos.txt, que o conteudo dele é o seguinte: >> grupo:*:usuario1,usuario2,usuario3 (resultado do comando # getent group >> > grupos.txt) >> >> usuarios.txt, que tem as informações dos usuários (resultado do comando >> # getent passwd > usuarios.txt) >> >> Tratei o usuarios.txt da seguinte forma: # cat usuarios.txt | cut -d: >> -f1,5 | tr : ' ' para que pegasse apenas o nome de usuário e o nome >> completo das pessoas, e substituisse os : por espaço, ficando o arquivo >> com o seguinte formato: >> usuario Nome Completo do Usuário, o que também tratei e deixei assim: >> usuario "Nome Completo do Usuário". >> >> Agora o que quero fazer: >> >> pegar todos os usuários pelo username e substituir pelo nome completo no >> arquivo grupos.txt, para que, ao invés de ficar vomo está, ele me >> mostre o nome completo de cada pessoa que faz parte do grupo, ficando >> assim: >> >> Grupo1:*:Nome Completo, Nome Completo 2, Nome Completo 3 >> >> Então o que pensei, pego a primeira referência de cada arquivo, e com um >> sed eu substituo. Se fosse fazer na mão, ficaria algo como: >> # cat grupos.txt | sed 's/usuario/\"Nome Completo\"/' >> >> Isso funciona para cada um, mas se fosse para fazer manualmente não >> estaria fazendo um script ;-) >> >> Com isso resolvi fazer um laço para pegar o conteúdo de cada linha e >> jogar em uma variável para fazer a substituição do arquivo, o que >> começou mais ou menos assim: >> >> #!/bin/bash >> for i in $(cat usuarios.txt | cut -d' ' -f1) ; >> do >> VAR1=$i >> done ; >> >> for j in $(cat usuarios.txt | cut -d\" -f2) ; >> do >> VAR2=$j >> done ; >> >> E foi ai que me enrosquei. Pois, somente com isso, ele irá listar as >> linhas e jogá-las nas variáveis, mas com esse laço for vai ocorrer que >> as variáveis irão armazenar, dessa forma, a ultima ocorrência dos dois >> laços, correto? Então pensei que esses laçoes devam estar dentro de um >> while, talves, checando algo como: >> >> CONT=`cat usuarios.txt | wc` >> while [ $CONT -ge 0 ] ... >> >> E com isso pegar cada linha do cat, para que ele faça algo como, pege a >> VAR1 e compare com a linha do grupo que possua o mesmo nome de usuário e >> substitua por VAR2. >> >> Mas depois disse me enrosquei e fiquei na mão. Talvés existam formas, e >> acredito que sim, muito mais fáceis de fazer isso, mas didaticamente >> falando, poderiam dizer como terminar esse script, e se puderem oferecer >> uma solução amigável além da explicação seria bom para o aprendizado e >> para que da próxima vez eu não tenha que escrever um romance para obter >> ajuda. >> >> Obrigado pela atenção. >> >> > > > > -- > César Vianna > ------------------- > "Talvez porque eu pense demais ou sonhe demais, o certo é que não distingo > entre a realidade que existe e o sonho, que é a realidade que não existe." > Fernando Pessoa > -- César Vianna ------------------- "Talvez porque eu pense demais ou sonhe demais, o certo é que não distingo entre a realidade que existe e o sonho, que é a realidade que não existe." Fernando Pessoa [As partes desta mensagem que não continham texto foram removidas]