http://www.zago.eti.br/script/scripts-textos.txt FAQ com mensagens, dicas, exemplos e modelos de scripts pra manipular textos, veja outros FAQ neste diretório. Use CTRL+F para refinar a pesquisa. Veja também neste diretório (site) FAQ sobre: scripts.txt -> sobre script em geral. tar.txt -> script para backup log.txt -> script sobre analize de log awk.txt -> utilitario bastante util para manipulacao de strings convert.txt -> dicas para conversão de textos e arquivos. Pesquise no google, pra pesquisar por script pra numerar linhas, pesquise por algo como: numerar linhas script ~linux Pra modificar arquivos use também o "ed", veja no manual. man ed Neste FAQ mensagens sobre scripts para manipulação de palavras, linhas e outros serviços aplicados a textos. Para converter textos, imagens e arquivos veja também neste diretório o arquivo. convert.txt ********************************************************************* Contar linhas de um arquivo $ wc -l $ wc -l scripts.txt 2234 scripts.txt [zago@faq guiaz]$ wc -l cdr.txt 4059 cdr.txt ********************************************************************* Remover linhas em branco e linhas comentadas. Arquivos de configuração geralmente tem muitas linhas comentadas, são úteis pra auxilar na configuração, são linhas que iniciam com #, estas linhas e também as linhas em branco não são interpretadas em scripts nem nos arquivos de configuração, pode remove-las ou acrescentar mais comentarios. Estes comentários são úteis como ajuda na configuração mas atrapalham quando temos que enviar o arquivo de configuração pra alguém, por exemplo listas de discussão ou até mesmo pra comparar as diferenças entre dois arquvos, pra isto podemos limpar o arquivo pra facilitar no manuseio, comparação.... Os exemplos a seguir são para o arquivo de configuração do squid, pra aplicar em outros arquivos altere o caminho e nome do arquivo, ou vá até o diretório onde está o arquivo e aplique a linha de comando apontando para o nome correto do arquivo. Uma maneira mais segura e pratica é fazer copia do arquivo e trabalhar com a copia, ou pelo menos faça copia antes antes de aplicar qualquer comando que modifique o arquivo. Existe situações pra alterar o arquivo diretamente, na maioria dos casos não pode aplicar as mudanças no proprio arquivo, dependendo do aplicativo ou quando usa ">", um novo arquivo vazio será criado pra salvar os resultados. Agora imagine o resultado que pode sair, ler um arquivo vazio, aplicar filtros e salvar no mesmo arquivo, normalmente o resultado final é um arquivo vazio, sem nada pra filtrar e sem nada pra salvar. Portanto, para a sua segurança, faça copia antes de qualquer comando que não domine ou conheça todas as consequencias do uso dele. Tente sempre salvar as alterações em outro arquivo, pra isto acrescente no final da linha de comando: > arquivomodificado com isto todo o resultado do comando será desviado para o arquivo indicado. Também pode mover o arquivo de configuração pra outro nome ou local, aplicar os comandos que modifique o arquivo e no final da linha de comando acrescente o desvio ">" mais o caminho e nome default do arquivo. Exemplo pra limpar o arquivo /etc/squid/squid.conf, a primeira linha renomeia o arquivo, a segunda limpa o arquivo e salva o resultado com o nome default do arquivo, assim mantém uma copia do original sem alterações, cuidado pra não executar o "mv" mais de uma vez pra não sobrescrever a copia. mv /etc/squid/squid.conf /etc/squid/squid.conf-original egrep -v "^#|^$" /etc/squid/squid.conf-original > /etc/squid/squid.conf Ou se preferir aplique as regras diretamente no arquivo de configuração e salva as modifiações em outro arquivo, exemplo: egrep -v "^#|^$" /etc/squid/squid.conf > /etc/squid/squid.conf-limpo Assim não altera nada no arquivo original e os efeitos do filtro são aplicados somente no arquivo destino. Outros comandos e dicas pra auxiliar no manuseio destes arquivos. Pra fazer somente a copia use cp em lugar de mv: cp /etc/squid/squid.conf /etc/squid/squid.conf-original Contar as linhas do arquivo: wc -l squid.conf 3317 squid.conf Fazer copia do squid.conf, entrar no diretório pra fazer copia: cd /etc/squid cp squid.conf squid.conf-original Ou diretamente de qualquer local, ideal pra copiar e colar. cp /etc/squid/squid.conf /etc/squid/squid.conf-original Exemplo pra remover somente as linhas em branco: cat squid.conf | grep -v ^$ > squid.conf-limpo ^ - início de linha $ - fim de linha Limpando as linhas em branco com grep. grep . squid.conf > squid.conf-grep Neste exemplo o uso do ponto (.) condiciona o grep pegar pelo menus um caracter na linha, então as linhas em branco serão descartadas por não possuir pelo menos um caracatere. Limpando as linhas em branco com sed sed '/^$/d' squid.conf > squid.conf-sed Limpando as linhas em branco com awk awk 'NF>0' squid.conf > squid.conf-awk Limpando todos os comentarios e linhas em branco egrep -v "^#|^$" squid.conf > squid.conf-limpo ********************************************************************* Comparar dois smb.conf e salvar as diferenças entre eles em /tmp/smbdif (altere o caminho e nome dos arquivos) egrep -v "^#|^$" /etc/samba/smb.conf > /tmp/smb1 egrep -v "^#|^$" /etc/samba/smb.confori > /tmp/smb2 diff -y --suppress-common-lines /tmp/smb1 /tmp/smb2 | tr -d '\011' > /tmp/smbdif less -Nis /tmp/smbdif ********************************************************************* Numerar linhas de um arquivo texto: Dentro do editor "vi" Exibir o texto com linhas numeradas. Em modo comando (pressione a tecla ESCAPE) pra entrar em modo comando e digite: :set nu Vai exibir no inicio da linha o seu respctivo numero. Com o comando cat: Neste tópico alguns exemplos pra numerar linhas do arquivo, este efeito ocorre somente na tela e não afeta o arquivo, pra numerar as linhas e salvar as mudanças em arquivo, precisa redirecionar a saida pra outro arquivo, pra isto acrescente no final da linha de comando: > arqnumerado Ex com o cat: cat -n comandos.txt > comandosnum.txt Exemplo pra incluir o caminho onde deseja salvar: cat -n comandos.txt > /home/usuario/meusdoc/comandosnum.txt Este exemplo pra redirecionar a saida se aplica a qualquer resultado de outros comandos que enviam o resultado pra tela. Com less use -N exemplo: less -N comandos.txt Com cat use -n exemplo: cat -n comandos.txt Com awk, veja exemplo de linha de comando: awk '{print NR" "$0}' comandos.txt > comandosnum.txt Com o kwrite no KDE basta pressionar a tecla F11 Com linhas numeradas (somente na exibição), mostrar o conteúdo do arquivo com a numeração das linhas, inclusive as linhas em branco. ex.: cat -n cp.txt | more Ou o mesmo resultado com less: less -N cp.txt Numerar as linhas do resultado de ls ls | cat -n ou cat -n <(ls) Salvar o resultado de ls em arquivo com linhas numeradas. cat -n <(ls) > lsnumerado Com detalhes, ls -la cat -n <(ls -la) > lsnumerado ou ls -la | cat -n > lsnumerado com o comando find. find /home/zago/guiaz | cat -n Com linhas numeradas excluidas as linhas em branco. ex.: cat -b cp.txt | more Numerando linhas com "nl" nl arquivo.txt nl arquivo.txt > arqnumerado.txt Tem diversas opções, veja mais sobre nl info coreutils nl man nl info nl nl --help Com tee - Redirecionar e visualizar ao mesmo tempo. tee man tee tee - lê da entrada padrão e grava na saída padrão # rpm -qf /usr/bin/tee coreutils-5.2.1-62747cl Exemplo pra listar na tela e salvar o mesmo resultado em arquivo, listar tudo que foi acessado nas ultimas 24 horas no diretório /home/zago e também salvar o mesmo resultado em acessadosz.txt find /home/zago -mtime -1 -type f | tee acessadosz.txt Ver o conteudo de comandos.txt e salvar em comandosnum.txt o mesmo resultado que exibe na tela. cat -n comandos.txt | tee comandosnum.txt ********************************************************************* Exibir caracteres de controle, como fim de linha e etc... Dentro do editor "vi" Exibir todos os caracteres ocultos dentro do arquivo, como fim-de-linha, e etc.. Em modo comando (pressione a tecla ESCAPE), digite no documento: :set list Vai aparece a linha acima no final da tela e todos os caracteres ocultos do texto passam a serem visiveis. Com o comando cat pra exibir cararectes de controle, final de linha e etc.. use a opçõa -A no formato cat -A , exemplo: cat -A cp.txt ********************************************************************* Converter arquivos texto do dos -> unix ou unix -> dos O final de linha em arquivos DOS aparece no Linux com ^M, exemplo como um arquivo for DOS é visto no Linux com final de linha ^M$: cat -A autoexec.bat mode con codepage prepare=((850) C:\WINDOWS\COMMAND\ega.cpi)^M$ mode con codepage select=850^M$ keyb br,,C:\WINDOWS\COMMAND\keyboard.sys^M$ Com sed pra converter o texto pra Linux, execute: sed 's/^M//g' autoexec.bat > unix.txt OBS. Comigo não funcionou copiar e colar a linha acima, até fiz a copia mas antes de dar enter, precisou apagar o ^M e digitar ^V^M, explicando, o ^M é a representação gráfica de CTRL+v+m, pra fazer a conversão o sed precisa do codigo das teclas, não tentei substituir no comando o ^M pelo codigo das teclas, nem sei se funciona, a solução adotada foi remover o ^M e posicionar o cursor no local, mantenha pressionada a tecla CTRL e pressione as teclas "v" e "m" que aparece o ^M, assim converte o arquivo, pra ver o resultado: cat -A unix.txt mode con codepage prepare=((850) C:\WINDOWS\COMMAND\ega.cpi)$ mode con codepage select=850$ keyb br,,C:\WINDOWS\COMMAND\keyboard.sys$ Pra converter o arquivo unix pra DOS, use este formato: sed 's/$/^M/g' unix.txt > arqdos.txt Lembre de apagar o ^M e digitar em seu lugar CTRL+v+m. Enquanto não descubro qual a solução que funciona com copiar e colar, vai valendo a dica de substituir o ^M pela digitação do CTRL+v+m. Explicando: No Linux o final de linha é um LF ("line-feed"), no DOS o final de linha são dois caracteres, o CR e LF (CR = carriage return, LF = line feed) codigo ASCII 13 e 10. ********************************************************************* Remover linhas duplicadas. cat arqorigem | sort | uniq > arqnovo em arqnovo não tem as linhas repetidas do arqorigem. man uniq uniq - remove duplicate lines from a sorted file No CL10 uniq vem no pacote coreutils. ********************************************************************* De: Vinicius Nogueira Para: Grupo Conectiva Assunto: Re: (linux-br) locaizar caracteres Data: 06 Aug 2002 07:47:20 -0300 Olá... head -n X nome_do_arquivo | tail -n 1 Onde X é a linha a ser exibida/capturada e nome_do_arquivo é o arquivo onde será procurado a linha. É verdade... esse tal de "man" funciona mesmo ;-))) Valeu Godoy. Vinicius Nogueira ----- Original Message ----- From: "Jorge Godoy" Subject: Re: (linux-br) locaizar caracteres > man tail + man head ;-))) > > hehehehehe... > Pode ser que exista algo mais simples, mas sou um cara antigo :-)) A > combinação desses dois comandos fará o que você quer. ********************************************************************* De: Piter Punk Para: Frederico Madeira , Linux-BR Assunto: Re: (linux-br) Dúvida shell Data: 11 Apr 2003 14:30:43 -0300 Frederico Madeira wrote: 1. Contar quantas linhas um determinado arquivo tem wc -l arquivo 2. Ler apenas uma determinada linha do arquivo 2 jeitos (que eu sei) $ head -7 arquivo | tail -1 Isso vai mostrar a linha 7 do arquivo. Ou: $ awk 'NR==7' arquivo Também vai mostrar a linha 7. Falous, Piter PUNK PS> na minha página tem o método 2, mas de um jeito mais comprido... tenho que arrumar lá... responder a lista ajuda o próprio cérebro a funcionar -;) -- ********************************************************************* De: Waldirio M. Pinheiro Para: Frederico Madeira , Linux - BR Assunto: (linux-br) RES: (linux-br) Dúvida shell Data: 10 Apr 2003 21:49:36 -0300 Boa Noite > 1. Contar quantas linhas um determinado arquivo tem cat arquivo |wc -l obs.: em caso de dúvidas, primeiramente man wc > 2. Ler apenas uma determinada linha do arquivo Existem várias formas, essas linhas tem algum referencial?, algum número?. Mande-nos um trecho do arq. que vc deseja ler. ********************************************************************* De: Bruno Tinoco Para: fred@rce.neoline.com.br, linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Dúvida shell Data: 10 Apr 2003 20:21:50 +0000 Olá Frederico, Segue alguns exemplos de scripts shell Para contar as linhas: ---------[conta.sh]---------- #/bin/sh cat -n $1 |cut -f1 |tail -1 ----------------------------- [root@localhost:/]# ./conta.sh arquivo.txt Para ver determinada linha de uma arquivo: ---------[verlinha.sh]---------- #/bin/sh cat -n $1 |grep -n $2 |cut -d":" -f2 ------------------------------- [root@localhost:/]# ./verlinha.sh arquivo.txt 10 Abração, Bruno C. Reded Tinoco brunocrt@hotmail.com From: Frederico Madeira To: Linux - BR Subject: (linux-br) Dúvida shell Date: 10 Apr 2003 01:46:59 -0300 Pessoal, COmo poderia realizar as seguintes operações no shell: 1. Contar quantas linhas um determinado arquivo tem 2. Ler apenas uma determinada linha do arquivo Grato. ********************************************************************* De: Julio Biason Para: Linux - BR Assunto: Re: (linux-br) Dúvida shell Data: 10 Apr 2003 15:27:25 -0300 Frederico Madeira : > 1. Contar quantas linhas um determinado arquivo tem wc -l > 2. Ler apenas uma determinada linha do arquivo Com awk cat arquivo | awk -e '{if(NR == ) { print $0; }' Ou com head/tail (embora seja feio pacas): head -n | tail -n1 (a ideia e' exibir as n primeiras linhas e depois pegar so' a ultima - eu avisei que era feio :) ) -- ********************************************************************* De: rabonilho@ig.com.br Para: linux-br@bazar.conectiva.com.br Assunto: (linux-br) Ajuda em Shell script Data: 14 Apr 2003 13:56:34 -0300 Boa Tarde PessoALL, Gostaria da ajuda de vcs, estou fazendo um script que lê um arquivo txt pega uma palavra e me retorna em uma variável, depois gostaria de colocar uma extensão. ex: AVVER=`cat readme.txt | tr "\n" " " | cut -d" " -f91` se eu der echo $AVVER vem uma beleza, mas se eu colocar echo $AVVER.zip contece o seguinte: [root@dat]# echo $AVVER.ZIP ZIP40 Alguem sabe o que acontece ???? Muito Obrigado, ********************************************************************* De: crg Responder-a: crg3k@terra.com.br Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Bash script... Data: 13 Jul 2002 12:14:59 -0300 On Sábado 13 Julho 2002 09:34, Jozeph Brasil wrote: > Funcionou que foi uma beleza... mas eu estava precisando disso em forma > de script... perl, bash, etc... :) ok, ai vai: -=-=-=-=-=-=-=-=- #!/bin/bash # Ordena passwd com shadow # licenca: Dominio publico # Criado e testado por amigos da Linux-br # use por sua propria conta e risco. # -=-=-=-=-=-=-=-=-=-=-=-=- if test $UID -eq 0 then /usr/sbin/pwunconv rm -f /etc/passwd.old mv /etc/passwd /etc/passwd.old sort -n -t : -k 3 /etc/passwd.old > /etc/passwd /usr/sbin/pwconv chmod 0600 /etc/passwd.old echo -e "\aConcluido!" else echo -e "\aApenas o root pode usar $(basename $0) !" fi -=-=-=-=-=-=-=-=- Claro, em Perl provavelmente voce faz a mesma coisa em duas linhas. -- CRG Linux user: #76132 GPG Key ID 65F2187D Libertas pecunia lui non potest. ********************************************************************* UpCasing Algum dia voce ja teve a chance de ver aquele monte de nome de arquivos em UPCASE? Voce se sente ofendido pessoalmente de ter que trabalhar arquivos colocados no seu site ftp por pessoas que usam MS-DOS/Win e aqueles arquivos que parecem estar gritando na sua cara quando voce da "ls" ? Entao essa aqui e muito boa pra voce, o comando tr (translate) pode ser usado da seguinte forma num script para fazer isso: #!/bin/sh # downcase by Eduardo Marcel Macan # use at your own risk ;-) if [ $# = 0 ] then echo "usage: downcase [file ...]" exit fi for FILE in $* do mv $FILE `echo $FILE | tr '[A-Z]' '[a-z]` done A construcao do "upcase" fica como exercicio para o leitor, essa foi a dica H :-), A dica de hoje nos foi enviada por Eduardo Marcel Macan, figura lendaria da Internet Brasil, fundador da lista linux-br, entre outras coisas ;-) ********************************************************************* De: Fábio Berbert de Paula Para: Rafael Colucci Cc: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Ajuda com script Data: 26 Sep 2002 14:37:07 -0300 Olá Rafael, > Preciso fazer um script que substitua o caracter espaco pelo caracter _ > de varios arquivos dentro de um diretorio. Alguem tem isso pronto ou > sabe com fazer ? Entra no diretório e digita esse comando: for i in `ls | sed 's/ /_/g'`; do ARQ=`echo $i | sed 's:_: :g'`; mv "$ARQ" $i; done Que é identico à: for i in `ls | sed 's/ /_/g'` do ARQ=`echo $i | sed 's:_: :g'` mv "$ARQ" $i done Atenciosamente, -- Fábio Berbert de Paula | fabio@vivaolinux.com.br ********************************************************************* De: Anderson Lizardo Para: Alexandre Perevalo Cc: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Shell Data: 18 May 2003 16:40:22 -0300 Em Terça, 13 de Maio de 2003 10:14, Alexandre Perevalo escreveu: > Tenho um arquivo texto com várias linhas nele. Entre as linhas existe > uma linha em branco. Gostaria de saber qual comando deveria usar para > eliminar as linhas em branco do arquivo. Caso as linhas sejam totalmente em branco (sem espaços, por exemplo): $ cat arquivo.txt | sed '/^$/d' > arquivo2.txt Caso as linhas em branco possam possuir espaços: $ cat arquivo.txt | sed '/^ *$/d' > arquivo2.txt Em ambos os casos, "arquivo2.txt" conterá o arquivo modificado. -- Anderson Lizardo ********************************************************************* De: Felipe Kellermann Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) grep ??? Data: 17 Jun 2003 00:35:58 -0300 On Fri, 16 May 2003 10:26am -0300, Thiego Xavier wrote: > Estou usando o 'grep' para pegar um valor de arquivo. > $ cat bancos.txt | grep palavra > So que o 'grep' faz um like e ñ um igual, preciso fazer com q ele traga > apenas o texto 'palavra'. > Como fazer isso? O `cat` para o pipe aqui é desnecessário. E o grep já possui uma opção para comparar palavras, -w. A opção é 'word-regexp', equivalente a: '\bargumento\b' (borda, argumento, borda), e também a 'line-regexp', -x, equivalente a: '^argumento$'. Se tu quiseres selecionar apenas as palavras e ignorar as subpalavras válidas, o exemplo: $ cat bancos.txt palavra palavra1 palavrao palavra-chave $ grep -w palavra $_ palavra palavra-chave $ tr -d - < $_|!!:-2 palavra -- ********************************************************************* De: Adilson - Solucao Linux / Software - Servidores Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Script para gerar ou editar arquivo texto Data: 03 Jul 2003 22:49:33 -0300 > > Você terá que redirecionar a saída padrão para um arquivo ou, > opcionalmente, fazer com que o find grave a saída em um arquivo. > Você também terá benefícios lendo a página de manual do find. Verá que > não precisas do '-print' acima, entre outras coisas. > Tome cuidado com a expansão da variável $TEXTO. No caso de um grep > erros podem ser inofensivos, mas dependendo do que você for fazer, > pode ter surpresas nada agradáveis. > uma forma recursiva dentro de vários diretórios seria criar um script com o comando grep e usá-lo na opção "-exec" do find ... fica assim : faça um script chamado "procura.sh" com os comandos : if [ -d "$1" ] || [ -c "$1" ] || [ -b "$1" ] || [ -L "$1" ]; then echo . . . Saltando Arq. "$1" formato NAO TEXTO . . . . . else echo Procurando em "$1" grep -i "$2* "$1" fi depois execute : find /diretorio_desesado -exec procura.sh {} "string_desejada" \; -- um abraço Adilson. ********************************************************************* De: Anderson Lizardo Para: linux Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br) grep, cut, sed .. sei la... :-) Data: 03 Jul 2003 21:11:19 -0300 Em Quarta, 02 de Julho de 2003 16:19, linux escreveu: > Tenho um arquivo com o formato + ou - assim.. > > 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,a,b,c,d,e,f,g,h,i,j,k >,l,m,n, > o,p,r,s,t,u,I,II,III,IV,V,VI,VII,VII,IX,X,XI,XII,XII,XIV,XV,XVI,XVII, >XVII,XI X,XX > > e por ai vai... ou seja... a cada 20 campos delimitados por "," eu > tenho um registro... mas nao tenho CR LF (0D0A) em nenhum momento pra > separar cada registro... Olá, Ufa! Passei um tempão quebrando cabeça em como fazer o sed funcionar para esta tarefa. Cheguei a pensar que tinha um bug no sed, ou algo do tipo. Depois notei que faltava um singelo "18" no arquivo exemplo, fazendo com que o primeiro registro tivesse 19 caracteres e o restante dos registros ficassem bagunçados. Aí vai o comando: sed 's/\([^,]*,\)\{20\}/&\n/g' arquivo.txt | sed 's/,$//g' \ > arquivo_novo.txt O segundo sed serve apenas para remover as vírgulas do final de cada linha. As newlines criadas serão "LF" (padrão no Unix). O esforço valeu como desafio ;-) mais informações: man sed; info sed -- Anderson Lizardo ********************************************************************* De: Bruno Castro da Silva Para: linux-br@bazar2.conectiva.com.br Assunto: (linux-br) Re: grep, cut, sed .. sei la... :-) Data: 03 Jul 2003 20:43:09 -0300 > e por ai vai... ou seja... a cada 20 campos delimitados por "," eu >tenho um registro... mas nao tenho CR LF (0D0A) em nenhum momento pra >separar cada registro... Dah pra fazer assim: awk 'BEGIN { FS = "," } { for (i=1; i<=NF; i++) { printf("%s,", $i); if ((i % 20)==0) print ""; } }' arquivo_de_dados A primeira linha configura o awk para, antes de comecar qq processamento, considerar como separador de campos a virgula.. depois, para cada linha que ele processar (possivelmente uma soh, jah que o teu arquivo nao tem \n separando os registros), ele percorre todos os campos, imprimindo eles. O (i % 20)==0 serve pra que, a cada 20 campos que ele processar, ele de um \n (eu faco a nova linha usando o comando print ""). Caso tu queira fazer qualquer outra coisa pra marcar o final de um registro, eh soh substituir o print "" por outra coisa. Espero que seja isso que tu precisa. Abraco, bruno ********************************************************************* De: Mike Shigueru Matsumoto Para: Paulo Roberto Bagatini , Lista Conectiva linux-br Assunto: Re: (linux-br) grep, cut, sed .. sei la... :-) Data: 03 Jul 2003 22:10:19 -0300 Oi Amigo tudo bem? Eu fiz um script aqui bem simples para resolver o seu problema. Usei: cut, tr, tee, expr e um while Leia os comentarios, mude os valores das variaveis e qualquer coisa mail-me. ====================================================== #!/bin/bash # arquivo base que sera consultado. o que contem 1,2,3,4,5,6..... file="/home/fuji/base" # arquivo que vai ter resultado do programa. As strings separadas por linha. # toda vez que o programa for executado, o antigo arquivo é excluido # se nao quiser que o antigo arquivo seja sobrescrito comente a linha do "rm" result="/home/fuji/result" rm -f $result 2>/dev/null # arquivo temporario aux="/tmp/aux" # Eliminando todos os caracteres de nova linha que possam estar no arquivo # base tr -d "\n" < $file > $aux cat $aux > $file rm $aux # Define o numero maximo de diferentes strings que ele ira procurar number_strings=3 cont=1 while [ $cont -le `expr $number_strings \* 20` ]; do cut -d, -f$cont-`expr $cont + 19` $file | tee -a $result cont=`expr $cont + 20` done ============================================================ Abraços... -- Mike Shigueru Matsumoto ********************************************************************* De: Paulo Roberto Bagatini Para: linux Cc: Luis Fernando Ferreira Filho Assunto: Re: (linux-br) grep, cut, sed .. sei la... :-) Data: 03 Jul 2003 01:11:18 -0300 linux said the following on 07/02/03 17:19: Tenho um arquivo com o formato + ou - assim.. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,a,b,c,d,e,f,g,h,i,j,k,l,m,n, o,p,r,s,t,u,I,II,III,IV,V,VI,VII,VII,IX,X,XI,XII,XII,XIV,XV,XVI,XVII,XVII,XI X,XX e por ai vai... ou seja... a cada 20 campos delimitados por "," eu tenho um registro... mas nao tenho CR LF (0D0A) em nenhum momento pra separar cada registro... Oque eu queria era uma forma de usar algum utilitario como cut, sed, grep, sei la! :-)... para poder gerar um novo arquivo com os registros assim.. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20 a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u I,II,III,IV,V,VI,VII,VII,IX,X,XI,XII,XII,XIV,XV,XVI,XVII,XVII,XIX,XX ou seja separados com 0D0A... ou somente 0A (tanto faz...) Alguem tem alguma ideia? $ cat z 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u,I,II,III,IV,V,VI,VII,VII,IX,X,XI,XII,XII,XIV,XV,XVI,XVII,XVIII,IX,XX Isso parece ser um trabalho para o super...sed :-) Mas com ele, o maximo que eu consegui foi :-( $ cat z | sed "s/.\{20\}/&\n/g" 1,2,3,4,5,6,7,8,9,10 ,11,12,13,14,15,16,1 7,18,19,20,a,b,c,d,e ,f,g,h,i,j,k,l,m,n,o ,p,r,s,t,u,I,II,III, IV,V,VI,VII,VII,IX,X ,XI,XII,XII,XIV,XV,X VI,XVII,XVIII,IX,XX So que eu nao manjo muito de sed, mesmo. Mas eu aposto que da pra fazer. Com o awk tambem da: $ cat z | awk -F, \ '{for(i=1;i<=NF;i++){printf$i;if(i%20==0){print""}else{printf FS}}}' 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u I,II,III,IV,V,VI,VII,VII,IX,X,XI,XII,XII,XIV,XV,XVI,XVII,XVIII,IX,XX Nao eh tao elegante, mas resolve :-| []'s ********************************************************************* De:  sedrez@tecgraf.puc-rio.br Para:  Rodrigo Faria Tavares Cc:  linux-br@bazar2.conectiva.com.br Assunto:  RE: (linux-br)Sell Script Data:  Thu, 10 Jul 2003 17:51:00 -0300 (BRT) On 10-Jul-2003 Rodrigo Faria Tavares wrote: > como fazer em um script , abrir um arquivo X e fazer modficaçoes nele ? Rio de Janeiro, 10-Jul-2003 Você pode usar perl. Por exemplo: perl -pi -e ´s/^nome:/&*LK*/´ /etc/passwd Pode ser usado para bloquear a senha do usuário ¨nome¨. ----- Paulo F. Sedrez ********************************************************************* De:  Dicas-L-Owner@unicamp.br Assunto:  [Dicas-L] Shell scripts não convencionais Data:  Fri, 18 Jul 2003 02:53:45 -0300 -------------------------------------------------------------------- Endereço: http://www.Dicas-l.com.br/dicas-l/20030718.shtml --------------------------------------------------------------------          PostgreSQL: Administração (DBA) e Linguagem PL/pgSQL                          Campinas : 30 de julho                          São Paulo: 16 de julho                            Mais informações       http://www.dextra.com.br/servicos/treinamento/pg/postgres.htm ------------------------------------------------------------------------   Shell scripts não convencionais   =============================== Na primeira linha de uma shell, geralmente encontramos algo do tipo:   #!/bin/bash ou   #!/bin/csh O que poucos sabem, é que podemos criar shells diretamente com outros comandos do Unix. Por exemplo, eu frequentemente preciso saber o meu endereço de trabalho, mas nunca me lembro onde coloquei o cartão com todos os dados. Este problema pode ser facilmente resolvido com uma shell como abaixo:   #! /bin/more   Rubens Queiroz de Almeida   Cidade Universitária Zeferino Vaz   Centro de Computação   Unicamp   13.083-970 - Campinas - São Paulo Este é um script que ecoa para a tela o seu conteúdo. Ao executá-lo temos:   #! /bin/more   Rubens Queiroz de Almeida   Cidade Universitária Zeferino Vaz   Centro de Computação   Unicamp   13.083-970 - Campinas - São Paulo Bom, apareceu também a primeira linha, que é uma informação que não preciso. Para resolver isto, basta fornecer ao comando more, o argumento +2, instruindo o comando a iniciar seu trabalho a partir da linha 2. O script fica então assim:   #! /bin/more +2   Rubens Queiroz de Almeida   Cidade Universitária Zeferino Vaz   Centro de Computação   Unicamp   13.083-970 - Campinas - São Paulo Desta forma a linha inicial não é mais exibida. Da mesma forma, se eu substituir a primeira linha por   #! /bin/ls -l Teremos uma shell que executa o comando **ls -l* sobre ele mesmo, como abaixo:   $ ./endereço   -rwxr-xr-x    1 queiroz  queiroz       137 Jul 12 18:40 ./endereço Parece meio inútil, mas certamente deve haver algum uso inteligente para esta facilidade .... --------------------------------------------------------------- As mensagens da lista Dicas-L são veiculadas diariamente para  assinantes.        Todas as mensagens da Dicas-L ficam armazenadas em                http://www.Dicas-l.com.br. A redistribuição desta e outras mensagens da lista Dicas-L pode ser feita livremente, deste que o conteúdo, inclusive esta nota, não sejam modificados. --------------------------------------------------------------- ********************************************************************* De:  Anderson Lizardo Para:  Alisson Marques da Silva Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br) Duvida progração shell Data:  Wed, 30 Jul 2003 22:17:14 -0300 (ART) Em Quarta, 30 de Julho de 2003 13:37, Alisson Marques da Silva escreveu: > Fiz este script que percorre um diretorio e cria um arquivo com o > nome do usuario em outro diretorio. > [script] > Como faço para em vez de percorrer o diretorio ele percorra um > arquivo de texto com o nome dos usuarios ?? Caso neste arquivo haja um usuário por linha (e que o nome dos usuários não contenha espaços, muito improvável ;-)), basta substituir a linha for USUARIO in * por for USUARIO in $(cat usuarios.txt) -- Anderson Lizardo ********************************************************************* De:  Dorian Bolivar Para:  Alisson Marques da Silva , linux-br@bazar.conectiva.com.br Assunto:  Re: (linux-br) Duvida progração shell Data:  Wed, 30 Jul 2003 23:46:31 -0300 > cd /home > for USUARIO in * > do >         touch /root/arquivos/teste > done > > Como faço para em vez de percorrer o diretorio ele percorra um arquivo de > texto com o nome dos usuarios ?? cd /home for USUARIO in `cat arquivo` do         touch /root/arquivos/teste         (ou touch /root/arquivos/$USUARIO, por exemplo) done     Note que o `cat arquivo` é entre crases. Teste se o arquivo texto precisa ter um nome por linha, ou se ele entende o espaço entre os nomes. []s, Dorian ********************************************************************* De:  Thiago Macieira Para:  Alisson Marques da Silva , linux-br@bazar.conectiva.com.br Assunto:  Re: (linux-br) Duvida progração shell Data:  Thu, 31 Jul 2003 01:34:59 +0200 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Alisson Marques da Silva wrote: >cd /home >for USUARIO in * >do >        touch /root/arquivos/teste >done > >Como faço para em vez de percorrer o diretorio ele percorra um arquivo de >texto com o nome dos usuarios ?? for USUARIO in `cat /etc/lista.txt`; do [....] done - --   Thiago Macieira  -  Registered Linux user #65028    thiagom@mail.com   ********************************************************************* De:  Felipe Kellermann Para:  Dorian Bolivar Cc:  linux-br@bazar.conectiva.com.br Assunto:  Re: (linux-br) Duvida progração shell Data:  Thu, 31 Jul 2003 13:57:21 -0300 (BRT) On Wed, 30 Jul 2003 11:46pm  -0300, Dorian Bolivar wrote: > > Como faço para em vez de percorrer o diretorio ele percorra um arquivo de > > texto com o nome dos usuarios ?? > > cd /home > for USUARIO in `cat arquivo` > do >         touch /root/arquivos/teste >         (ou touch /root/arquivos/$USUARIO, por exemplo) > done > >     Note que o `cat arquivo` é entre crases. Teste se o arquivo texto > precisa ter um nome por linha, ou se ele entende o espaço entre os > nomes.         Apenas uma recomendação: O uso de ` aqui é desnecessário e não é recomendável também, além de usar o cat, que também é desnecessário. Em qualquer shell deve existir a opção de usar $() -- e qualquer shell que for ksh-like ainda vai ter $( "$i"; done < arquivo -- Felipe Kellermann ********************************************************************* De:  crg Para:  Pablo Roberto , linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Shell Script Data:  Fri, 8 Aug 2003 06:56:59 -0300 Em Quinta 07 Agosto 2003 20:11, Pablo Roberto escreveu: > Só que ai é que esta o problema os numeros ips aparecem masi de uma vez e > eu preciso de um arquivo que liste os ips apenas uma vez. man sort man uniq sort ips.txt | uniq > ips2.txt -- CRG Linux user: #76132 / GPG Key ID: 65F2187D ********************************************************************* De:  Anderson Lizardo Para:  Cleyton , Linux-br Assunto:  Re: (linux-br)script bash para renomear arquivos Data:  Tue, 30 Dec 2003 22:18:50 -0400 Em Terça, 30 de Dezembro de 2003 22:57, Cleyton escreveu: > Estou tentando fazer um script para renomear todos os arquivos de um > diretório, de modo que os espaços em branco sejam substituidos pelo caracter > "_" (Underscore). > > Tentei fazendo assim (por enquanto, um arquivo apenas): > > echo `arquivo\ com\ espaço.txt | tr '\ ' '_'` A sintaxe acima está incorreta, tente: echo 'arquivo com espaço.txt' | tr ' ' '_' -- Anderson Lizardo ********************************************************************* De:  Anderson Lizardo Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: RES: (linux-br)script bash para renomear arquivos Data:  Tue, 6 Jan 2004 16:00:56 -0400 Em Terça, 6 de Janeiro de 2004 15:14, Flávio Duarte escreveu: > Anderson > > Teste o script que vc passou e ele não renomeou o arquivo para > arquivo_com_espaço.txt, vc tem outra sugestão? Eu apenas mostrei que o código enviado como exemplo estava sintaticamente incorreto. O código não renomeava arquivo nenhum, apenas substituía os espaços de uma string por underlines. Agora, para usar o conceito na prática e renomear os arquivos, use algo como: #!/bin/bash for arquivo in *; do     [ ! -e "${arquivo// /_}" ] && mv "$arquivo" "${arquivo// /_}" done -- Anderson Lizardo De:  Alex Para:  linux-br Assunto:  Re:_(linux-br)_Substituir_espaços_arquivo_texto Data:  Mon, 5 Jan 2004 17:32:08 -0800 (PST) Você pode utilizar comandos como awk, tr, sed, entre outros para realizar a manipulação de texto. Por exemplo: $ echo "fulano    ttyc02  :PPP   Thu Jan" | tr -s " " | sed -e "s/\ /@/g"   tr -s " ", remove as repetições de espaços em branco.   sed -e "s/\ /@/g", substitui as ocorrências de espaços em branco por um arroba.   O comando acima irá gerar a saída:     fulano@ttyc02@:PPP@Thu@Jan   O problema fica a cargo da data que não ficaria como você gostaria, já que os espaços em branco entre eles tb contam ...   Mas fica aí a dica para pesquisar sobre eles. O awk e o sed são bastante "poderosos" no que se refere a manipulação de texto.  :) Falows De:  (fuji) Mike Shigueru Matsumoto Para:  Márcio Luciano Donada Cc:  Lista Conectiva linux-br Assunto:  Re: (linux-br) Substituir espaços arquivo texto Data:  Mon, 5 Jan 2004 22:16:45 -0200 Use o comando tr para isto amigo... Supondo que o seu arquivo chama teste.txt ficaria algo assim:         # cat teste.txt | tr -d [:blank:] Ele vai exibir na tela o seu arquivo teste.txt sem os espaços em branco ou qualquer tabulação. Note que este comando acima ainda vai manter o conteudo do seu arquivo como o original. Para criar um novo arquivo, redirecione e a saida para outro arquivo. Assim:         # cat teste.txt | tr -d [:blank:] > novoarquivo.txt Consulte a documentação do tr ele é um comando que merece atenção... Por exemplo, ele serve para vc transformar todos os nomes de arquivos e diretorios em maiusculas ou minusculas... Ex: # ls -1 teste Teste2 novoTeste # ls | tr a-z A-Z TESTE TESTE2 NOVOTESTE ou ainda: # ls | tr [:lower:] [:upper:] Nenhum dos comandos acima vai renomear os arquivos, só vai exibi-los em maiúsculos. Para renomeá-los definitivamente vc precisaria do for em um script mais ou menos assim: ----------------- #!/bin/bash # renomeia arquivos do diretorio corrente para maiúsculos for i in *; do    upper=`echo $i | tr [:lower:] [:upper:]`    mv $i $upper done ------------------ E viva o tr!!! Abraços -- Mike Shigueru Matsumoto (fuji) Linux User: 251981 Analista e Desenvolvedor na Plataforma Linux http://planeta.terra.com.br/informatica/fuji De:  Douglas Pier Sobrido Para:  Lista Conectiva linux-br Assunto:  RES: (linux-br) Substituir espaços arquivo texto Data:  Tue, 6 Jan 2004 06:59:50 -0200 Use awk '{print $1"@"$2"@"$3"@"$4"@"$5"@"$6"@"$7"@"$8"@"$9"@"$10}' teste > teste.new Douglas De:  Vinicius P. Barbosa Para:  linux-br Assunto:  Re: (linux-br) Substituir espaços arquivo texto Data:  Wed, 7 Jan 2004 09:30:54 -0200 Tem o comando "tr" cat $ARQNOME |tr " " "@" Vinicius ********************************************************************* De:  Alex Para:  linux-br Assunto:  Re: (linux-br)Apagar uma linha do arquivo com Perl / shell Data:  Thu, 8 Jan 2004 18:07:32 -0800 (PST) Altera a expressão regular para (em Shell): "^teste$" Isso faz com que pegue exatamente a linha "teste" do arquivo. ********************************************************************* De:  AWK Para:  nado@onda.com.br Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Passando Argumentos VIM Data:  Sun, 2 Nov 2003 13:48:01 -0200 > Preciso fazer um Scipt que mude dentro de um arquivo todas as linhas que tenham > a palavra " Cadastro " tirem a extensão ".novo" e coloque ".velho" > Tentei da seguinte maneira: vim :Cadastro,s/.novo/.velho/g > Porém ele só abre o VI e nao fa nehuma alteração.          Caro colega,         O ideal para esta tarefa é usar o "sed":         sed '/Cadastro/s/isto/aquilo/g' arquivo.txt         ... irá executar a substituição apenas nas linhas que contêm a string "Cadastro".         A título de curiosidade:                          Para fazer isto com o VIm, conforme vc estava tentando, o correto seria ...                 vim -c "g/Cadastro/s/\.novo/\.velho/g" arquivo.txt                  [ ]'s   ********************************************************************* De:  Douglas Pier Sobrido Para:  tux_linux@ig.com.br, linux-br@bazar2.conectiva.com.br Assunto:  RES: (linux-br)Apagar uma linha do arquivo com Perl / shell Data:  Sun, 11 Jan 2004 04:46:13 -0200 Olá Fabio Se a solução pode ser em shell lá vai a minha sugestão. ed - arquivo.txt >/dev/null < Responder-a:  dl-forum@yahoogrupos.com.br Para:  dl-forum@yahoogrupos.com.br Assunto:  RES: [dl-forum] Localizando em um arquivo... Data:  Fri, 16 Jan 2004 09:07:59 -0300 cat /etc/passwd | cut -f 1 -d ":" > /logins.txt   Anderson da Silva Leite Administrador de Redes Potenza Consultoria e Tecnologia Ltda +55 71 8826 1337 +55 73 526 8006 -----Mensagem original----- De: João Hueder da Silva [mailto:joaohueder@jocas.com.br] Enviada em: quarta-feira, 14 de janeiro de 2004 10:26 Para: inf-linux@listas.inf.furb.br; dl-forum@yahoogrupos.com.br; linux - Leonardo; dicas-l-owner@unicamp.br; Aurelio Assunto: [dl-forum] Localizando em um arquivo...   Bom dia, Você sabe como faço para localizar e gravar em um arquivo, exemplo: /etc/passwd: joao:... jose:... pedro:... então como faço para criar um arquivo que mostre somente os nomes tipo joao, jose, pedro ... tirando o resto como ":" "/" etc... ********************************************************************* De:  Frederico Recsky Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Shell script -- Aspas Data:  Wed, 28 Jan 2004 07:38:53 -0200 > Parece besteira, mas eu estou apanhando disso. Isso é parte de um script que > joga esse texto com as variáveis interpretadas em outro arquivo. Só que > domínio.com.br e STELL não aparecem entre aspas. Isso é vital para o sucesso > do script. Alguém conhece algum recurso. > Grato > echo "subnet 10.$pre.$cli.4  netmask 255.255.255.252 { > use-host-decl-names on; >         option domain-name              "dominio.com.br"; >         option domain-name-servers        10.$pre.$cli.5; >         option host-name                "STELL"; > }" > /etc/cliente.conf knoppix@batman:~$ echo "subnet 10.$pre.$cli.4  netmask 255.255.255.252 { use-host-decl-names on;         option domain-name             \"dominio.com.br\";         option domain-name-servers        10.$pre.$cli.5;         option host-name               \"STELL\"; }" > cliente.conf Coloque antes das aspas uma barra dessa aqui: \ (barra invertida?) É como em linguagem C, com essa barra voce avisa o sistema que as aspas são os caracteres e não os delimitadores de string. Frederico ********************************************************************* De:  Anderson Lizardo Para:  Luciano RM Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)#cut - Campos vazios Data:  Tue, 17 Feb 2004 15:36:47 -0400 On Ter, 17 Fev 2004 10:28:14 -0300, Luciano RM wrote: > Agora quando esse mesmo comando é feito dentro de um arquivo > de script da seguinte maneira : > > teste=$(cut -d: -f8 shadow) > echo $teste > > resultado > > 12458 -1 -1 -1 -1 -1 -1 -1 > > Acontece que os espaços vazios que "sumiram" são de usuários > ativos assim como os -1, como se faz para que eles > "apareçam" dentro de uma listagem do arquivo shadow e em > forma de uma por resultado, assim como no prompt? Basta colocar "cut -d: -f8 shadow" direto no script sem repassá-lo a uma variável para depois imprimir novamente. Ou seja, substitua teste=$(cut -d: -f8 shadow) echo $teste por cut -d: -f8 shadow -- Anderson Lizardo lizardo@linuxfromscratch.org http://www.linuxfromscratch.org/ ********************************************************************* De:  Carlos Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Gerar aquivo texto Data:  Fri, 2 Apr 2004 21:59:00 -0300 On Friday 02 April 2004 21:04, Ronaldo wrote: > E ae Garela!! > > Gostaria de saber se alguem pode me ajudar > tenho em um diretorio varios arquivos txt contendo umas informaçoes de > clientes > gostaria de alguma coisa tipo sei la, um shel script ou algo parecido q > leia os arquivos > e gere um unico arquivo contendo todas as informações dos outros... sera q > issu é possivel ? > se alguem poder me da um help de como posso fazer issu..  beleza legal... > agradeço desde já > um abraço a todos.... > > > > Ronaldo > Debian User > ICQ #102691933 Altere os diretorios do script para os diretorios reais do seus sistema. De um chmod 755 script. #!/bin/bash lista=$(ls /diretorio-de-arquivos-txt) for x in $lista ; do cat $x >> /home/user/INFO.txt echo >> /home/user/INFO.txt done -- Linux user #349702 ********************************************************************* De:  Jorge Godoy Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)[perl] Como faco para suprimir 8 linhas de uma variavel ? Data:  Tue, 20 Apr 2004 11:42:58 -0300 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Tuesday 20 April 2004 09:59, hamacker wrote: > sejam suprimidas ? Entendo necas de perl. Tentei resolver usando > bash, mas ainda nao encontrei uma solucao com |grep que me > permitisse suprimir as oito linhas finais. Allguem mais entendido > em perl poderia me dar uma ajuda ? Em Perl eu colocaria o resultado em um array e suprimiria as últimas entradas do array. Em shell eu usaria algo como "head -n -8 arquivo" para recuperar as linhas sem as 8 últimas delas... Sds, - -- Godoy.     -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) ********************************************************************* De:  Carlos Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)[perl] Como faco para suprimir 8 linhas de uma variavel ? Data:  Tue, 20 Apr 2004 11:56:31 -0300 hamacker wrote: Oi gente, eu tenho seguinte codigo que gera um relatorio e grava o > resultado+sumario numa variavel chamada output : > chop($output = `/usr/bin/myreport $name`); > > a variavel $output tem 8 linhas finais que é um sumario que eu > gostaria de retirar, como eu faço para que as ultimas 8 linhas sejam > suprimidas ? Entendo necas de perl. Tentei resolver usando bash, mas > ainda nao encontrei uma solucao com |grep que me permitisse suprimir > as oito linhas finais. Allguem mais entendido em perl poderia me dar > uma ajuda ? > > []'s > Fiz o programa a seguir e espero ter ajudado, ele vai imprimir o arquivo texto suprimindo as ultimas 8 linhas.  Altere a variavei $filename pro arquivo original e altere tb a linha "open(STDOUT.">services2");" onde services2 e o arquivo txt ja formatado contendo o arquivo original menos as oito ultimas linhas. #!/usr/bin/perl # services2 e o arquivo de saida do programa: open(STDOUT,">services2"); $filename = services; $lines = 0; open(FILE, $filename) or die "Can't open `$filename': $!"; while (sysread FILE, $buffer, 4096) { $lines += ($buffer =~ tr/\n//);    } close FILE; $line_8 = $lines - 7; print("$line_8\n"); @filename_final = `cat services`; $x = 1; foreach (@filename_final) {        print("$_");        $x++;        if ($x == $line_8) {                       exit(0)               } } -- "Primeiro eles o ignoram. Depois, riem de voce. Chega um ponto em que lutam contra voce. Ate o dia em que voce vence." Gandhi SlackWare user #349702 ********************************************************************* De:  Thiago Macieira Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)ajuda com script Data:  Wed, 22 Sep 2004 22:04:26 -0300 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Accenture_Luiz_Estivalet@Dell.com wrote: >1) ler todos arquivos de um diretorio >2) para cada arquivo >       2.1)  ler linha-a-linha >       2.2)  para cada linha encontrar o simbolo ">". Remover todos os > caracteres a partir da posição do ">" até o final da linha 2.3) gerar > novo arquivo com os caracteres removidos perl -pi 's/>.*$//' * Pode ser sed também: sed -i 's/>.*$//' * Ou, se você preferir da maneira complicada: for file in *; do         rm /tmp/output         cat $file | while read line; do                 echo "$line" | sed 's/>.*$//'         done > /tmp/output         mv /tmp/output $file done Obviamente você vai escolher uma das duas primeiras alternativas. É um completo desperdício fazer da maneira complicada. - --   Thiago Macieira  -  Registered Linux user #65028    thiago (AT) macieira (DOT) info     ICQ UIN: 1967141   PGP/GPG: 0x6EF45358; fingerprint: ********************************************************************* De:  Augusto Lüdtke Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Dicas sobre a ferramenta awk (para editar arquivo texto) Data:  Mon, 22 Nov 2004 14:33:22 -0200 root@amasb:~/sed# sed -e 's/1\.//g' a.txt d2d3 e1f1 d1d3 root@amasb:~/sed# awk '{gsub(/1\./,"",$0) ; print $0}' a.txt d2d3 e1f1 d1d3 - o 'g' no script é para substituir todas as ocorrências - o \. é usado para tirar o significado do metacaracter . Augusto ----- Original Message ----- From: "Ruben Carlo Benante" To: Sent: Wednesday, November 17, 2004 12:05 PM Subject: (linux-br)Dicas sobre a ferramenta awk (para editar arquivo texto) > - eliminar a substring "1." (um e ponto) das linhas. (...) > Se alguém puder ajudar, fico muito grato. Se souber como fazer sem ser > utilizando o awk, também serve, pois já ajuda! ********************************************************************* De:  Augusto Lüdtke Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)trocar textos em arquivos Data:  Mon, 20 Dec 2004 12:22:52 -0200 $ cat troca.sh #!/bin/bash for ARQUIVO in *.txt do         sed -e 's/telefone = 123/telefone = abc/' $ARQUIVO > temp         cp temp $ARQUIVO         rm temp done $ grep telefone *txt agenda1.txt:telefone = 123 agenda2.txt:telefone = 123 agenda3.txt:telefone = 321 $ ./troca.sh $ grep telefone *txt agenda1.txt:telefone = abc agenda2.txt:telefone = abc agenda3.txt:telefone = 321 ********************************************************************* De:  Thiago Macieira Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)trocar textos em arquivos Data:  Tue, 21 Dec 2004 02:41:54 -0200 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Augusto Lüdtke wrote: >Podemos trocar 6 por meia dúzia, mas daí o negócio só funciona em > sistemas com menos de 2 anos e com o GNU sed. Nesses casos, s/sed/perl/ funciona em 9 entre cada 10 casos:         perl -pi -e 's/telefone = 123/telefone = abc/' $ARQUIVO - --   Thiago Macieira  -  thiago (AT) macieira (DOT) info ********************************************************************* De: Jeffy and1 Responder A: Jeffy and1 Para: Claison Rezende Amorim Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Shell Script - Linha a Linha Data: Thu, 16 Jun 2005 08:43:57 -0300 a amigos, > > Gostaria de uma ajuda. Estou precisando ler um arquivo txt linha a > linha utilizando shell script. Alguem teria uma solucao ai pra me > ajudar???? > > Colega, não entendi... vc quer o o script exiba linha por linha na tela aguardando q o usuarios tecle para continuar... ? ou vc precisa ler linha a linha para checar algo?... uma "variavel" por exemplo...? bom.. em BASH vc pode usar o comando "read"...exemplo: cat seu_arquivo | while read linha_seu_arquivo; ... do espero ter ajudado... essa dica foi o pessoal da lista q me passou e deu certo... abs. jeff ********************************************************************* De: Herbert Alexander Faleiros Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Removendo linhas duplicadas em um TXT Data: Fri, 8 Jul 2005 14:21:25 -0300 On Friday 08 July 2005 10:48, Flavio Borup wrote: [cut] > Ja fiz um sort, para colocar em ordem alfabetica, mas tem como remover as > linhas duplicadas? herbert@faleiros:~$ cat teste.txt teste 1 teste 2 teste 2 teste 2 teste 2 teste 3 teste 3 teste 3 teste 4 teste 5 teste 5 teste 5 teste 5 teste 6 teste 7 teste 1 teste 2 teste 2 teste 2 teste 2 teste 3 teste 3 teste 3 herbert@faleiros:~$ cat teste.txt | sort | uniq teste 1 teste 2 teste 3 teste 4 teste 5 teste 6 teste 7 ********************************************************************* ********************************************************************* ********************************************************************* ********************************************************************* *********************************************************************