[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: RES: [shell-script] Inserir string no inicio da linha
From: |
Jose NIEVIADONSKI |
Subject: |
Re: RES: [shell-script] Inserir string no inicio da linha |
Date: |
Tue, 10 Sep 2002 17:41:13 -0300 |
Alo julio e companheiros da lista.
Excelente sua solução, mas vou dar mais um pitaco, que me parece mais
simples. Não precisa "guardar" a linha toda para depois recuperar com "\1",
basta usar o caractere ancora "^" que representa o inicio da linha.
Então o comando ficaria assim
Prompt> sed '3s/^/"inclui no inicio"/' testeq
Abraços a todos da lista.
José Augusto Martins Nieviadonski
Analista de Suporte Consultor
HSBC Bank Brasil S.A. - Banco Múltiplo
Treinamento de Informática
Para: address@hidden
cc:
cco: Jose NIEVIADONSKI/HBBR/HSBC
Assunto: RES: [shell-script] Inserir string no inicio da linha
"Julio Cezar Neves - DISB.O" <address@hidden>
10/09/2002 04:32 PM
Favor responder a shell-script <font size=-1></font>
> -----Mensagem original-----
> De: Wagner Melcíades [mailto:address@hidden]
> Enviada em: segunda-feira, 9 de setembro de 2002 17:34
> Para: address@hidden
> Assunto: [shell-script] Inserir string no inicio da linha
>
> Tenho um script que precisa inserir o valor de uma variavel
> (que pode ser
> uma string) no inicio de uma linha especifica de um arquivo
> texto, claro sem
> alterar o restante do conteudo da linha. Alguem pode me dar a
> dica usando o
> sed? Inserir no inicio de todas as linhas é facil mas numa
> linha especifica
> eu nao consegui.
===========================================================
Olha ai Wagner,
tai o que vc queria:
Prompt> cat testeq
11111111111111111111111111
22222222222222222222222
333333333333333333333333
44444444444444444444
9999999999999999
000000000000000000000
Prompt> sed '3s/\(.*\)/"inclui no inicio"\1/' testeq
11111111111111111111111111
22222222222222222222222
"inclui no inicio"333333333333333333333333
44444444444444444444
9999999999999999
000000000000000000000
Pra entender (ou não :)
3s substitui (s) na 3ª linha (3)
(.*) Os parenteses servem para formar um grupo.
No caso, (.*) do registro inteiro.
As contrabarras servem para "escapar" os parenteses.
\1 Serve para devolver o grupo gerado pelos parênteses.
Desta maneira eu falei para, na 3ª linha, copiar todo o seu conteúdo,
escrever "inclui no inicio" e restaurar o que foi copiado.
======================================================
>
> Outra dúvida: neste mesmo script tentei usar o sed para
> substituir virgula
> por ponto em uma tabela em forma de arquivo texto de 34000
> linhas, só que o
> sed só fez o serviço em apenas uma coluna e finalizou sem
> erro, alguem sabe
> por que?
> O arquivo é muito grande? Alguma limitação?
>
> A sintaxe é trivial:
>
> sed 's/,/./' arquivo_ori.txt > arquivo_novo.txt
>
=======================================================
Sua segunda dúvida é muito simples. Qdo vc faz:
sed 's/,/./' arquivo_ori.txt > arquivo_novo.txt
vc está mandando substituir a 1ª vírgula por ponto. Para substituir todas,
vc deveria tornar a substituição "global", e isso vc consegue da seguinte
maneira:
sed 's/,/./g' arquivo_ori.txt > arquivo_novo.txt
==========================================================
> Desde já agradeço qualquer ajuda.
>
> Wagner
>
[ ]s,
Julio Cezar Neves
-Eu Apoio o Software Livre-
-I Support Free Software-
* +55 21 2528-7070 / 9853-4044
*address@hidden
The information contained in this e-mail is confidential. It may also be legally
privileged. If you are not the addressee you may not copy, forward, disclose
or use any part of it. If you have received this message in error, please
delete it
and all copies from your system and notify the sender immediately by return
e-mail.
E-mail communications cannot be guaranteed to be timely secure, error or
virus-free.
The sender does not accept liability for any errors or omissions which arise as
a result.