Script VI [RESOLVIDO]

1. Script VI [RESOLVIDO]

marcelo
maarcelodruida

(usa Outra)

Enviado em 17/04/2013 - 14:09h

Olá, sou novo no mundo linux, e estou enfrentando uma dificuldade aqui no meu trabalho, tenho cerca de 64 arquivos dentro de um mesmo diretorio que precisam ser alterados em uma maquina AIX, preciso saber se é possivel criar um script que abra um de cada vez e altere automaticamente o conteudo.

estou fazendo ''na mão'' utilziando o :%s[x[y[g porém demora demais e tenho mais alguns diretorios para fazer essa alteração.


obrigado desde ja caso alguem consiga me ajudar :D


  


2. MELHOR RESPOSTA

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 17/04/2013 - 19:29h

Onde ele encontrar exatamente isto "MGmentbackup:NAS_365D_MGT_" vai substituir por "MGmentbackup:NAS_30_MGT_"


Lembrando do detalhe que o alexandre falou, os nomes dos arquivos não pode ter espaço.



#!/bin/bash

for arq in `ls -la *|awk '{print$8}'`
do

sed -i "s/MGmentbackup:NAS_365D_MGT_/MGmentbackup:NAS_30D_MGT_/" $arq

done




3. Re: Script VI [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 17/04/2013 - 15:02h

Da pra fazer praticamente tudo que vc imagina em Shell Script.
Mas pra isso vc tem q detalhar exatamente o que vc quer. Seria bom vc postar o trecho do conteúdo dos arquivos e o nome dos mesmos.
De qualquer forma, seria ideal vc pelo menos iniciar um código pra que nós podemos ensiná-lo a ajustar e chegar no que vc precisa! :)


4. Re: Script VI [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 17/04/2013 - 15:04h

Faça um backup antes de tudo OK! Vou passar para você uma ideia de como você pode fazer isto, deve ter vários outras maneiras, mas script e assim cada um faz do seu jeito.





Quando você da o comando ls -la * você lista tudo no diretório corrente, só que o resultado é assim:

-rw-rw-r-- 1 root nagios 11361 2013-04-17 14:29 cgi.cfg
drwxr-xr-x 2 root root 4096 2010-03-27 12:35 conf.d/
-rw-rw-r-- 1 root root 43741 2013-04-17 13:01 nagios.cfg


Com o comando FOR você percorre toda as linha do resultado do ls -la, para você pegar o nome do arquivo você usa o AWK e informa o paramento 8, que equivale a 8 coluna do resultado do ls -la * O comando SED você consegue trocar tudo que estiver dentro do arquivos


Uma ideia de como você pode fazer o script.

#!/bin/bash

for arq in `ls -la *|awk '{print$8}'`
do

sed -i "s/palavraOrigonal/palavraNova/" $arq

done





5. Re: Script VI [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 17/04/2013 - 16:34h

estefaniobrunha escreveu:
Uma ideia de como você pode fazer o script.

#!/bin/bash

for arq in `ls -la *|awk '{print$8}'`
do

sed -i "s/palavraOrigonal/palavraNova/" $arq

done




Quando for para pegar apenas o nome do arquivo/diretório não é recomendável usar o "awk '{print $8}", pois caso o arquivo/diretorio possua espaço(s), o mesmo retornaria uma saída errônea.

No geral eu uso dois comandos:


$ ls -lC1

ou

$ ls -l | awk '{print substr($0,45,200)}'
(neste caso o 45 é a posição da linha que queremos e o 200 é qtas posições vc deseja, a partir da 45)




6. Re: Script VI [RESOLVIDO]

marcelo
maarcelodruida

(usa Outra)

Enviado em 17/04/2013 - 19:03h

como eu mesmo disse, sou novo no mundo linux e ainda peguei um aix para trabalhar acaba me complicando haha, os aquivos estão em um diretório de um programa de backup, são scripts, com extensão .sh, a maioria varia tem o nome de HOO02PERDIGAO.sh variando os números, dentro do script possui 2 linhas que precisam ser alteradas

( MGmentbackup:NAS_365D_MGT_ ) essa linha, parte do código precisa ser altera para 30D, no caso esse script que o nosso amigo me passou realiza essa função ?


7. Re: Script VI [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/04/2013 - 20:54h

Se usar o seguinte modelo:

sed 'seus comandos' arquivo_velho | less 


você pode acompanhar como as mudanças estão sendo feitas de um modo mais fácil, sem ter que ficar vendo editor de texto toda hora.


Vá acertando o comando do sed até ele sair como você quer e daí parta para a troca massiva e definitiva.

Além disso, com

sed 'seus comandos' arquivo_velho > arquivo_novo 


você terá em arquivo_novo uma saída do arquivo modificado, sem alterar uma linha de arquivo velho.


8. Re: Script VI [RESOLVIDO]

marcelo
maarcelodruida

(usa Outra)

Enviado em 18/04/2013 - 10:35h

Tentei rodar o comando em apenas 1 arquivo como teste e apresenta esse seguinte erro:

sed: Cannot find or open file

verifiquei que a sintaxe me passada não roda no aix a opção -i do SED não funciona.

o diretorio e os arquivos ja estão com permissão e estão no mesmo diretorio.

--------EDIT

eu consegui fazer o script rodar, só que ele ta me retornando na TELA a alteração só que no original fica o mesmo valor.


#!/bin/ksh

for arq in `ls -la *|awk '{print$9}'`
do

sed 's/NAS_365/NAS_30/'

done


aqui é o que eu estou usando





9. Re: Script VI [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 18/04/2013 - 11:55h

o comando abaixo consegue pegar o nome do arquivo ?


ls -la *|awk '{print$9}'



10. Thanks !

marcelo
maarcelodruida

(usa Outra)

Enviado em 18/04/2013 - 11:59h



Fala galera, depois de uma procurada na net sobre o SED conseguir fazer uma ''gambiarra'' tipico do brasileiro haha meu código acabou ficando assim



#!/bin/ksh

for arq in `ls -la /usr/tivoli/tsm/client/ba/bin64/backup_nas/script_new/NETAPPCTRLA/teste/* | awk '{print$9}'`
do

sed 's[/backup_nas/log_new/vol/[/backup_nas/log_new/[' $arq > teste.txt
cat teste.txt > $arq

done

Alguns erros que eu vi foram que a shell é diferente e que no AIX o comando -i da SED não funciona direito :D

obrigado a todos
valeu !



11. Re: Script VI [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 18/04/2013 - 12:07h

estefaniobrunha escreveu:

script e assim cada um faz do seu jeito.



Blz! Parabéns! kkk




12. Re: Script VI [RESOLVIDO]

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 18/04/2013 - 12:13h


A shell default no AIX não é bash e sim ksh.
O comando sed que tem no AIX não é GNU, logo também não funcionará todas as opções como "-i".

Uma dica é compre um livro de shell script que fale de ksh e sh.
Você também pode instalar comandos GNU para o AIX dependendo da versão que vc estiver utilizando.


*** Qualquer solução em shell script não é gambiarra ****
Shell script server para simplificar tarefas como essa que estava com problemas.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts