Como inserir um texto num lugar específico de um aquivo pela linha de comando? [RESOLVIDO]

1. Como inserir um texto num lugar específico de um aquivo pela linha de comando? [RESOLVIDO]

toninho
gem

(usa Debian)

Enviado em 05/02/2010 - 08:55h

Olá
Estou precisando inserir uma linha de texto num lugar específico de um arquivo. Como esse procedimento vai ser feito em dezenas de máquinas, gostaria de fazer um script que fizesse esse trabalho.
O que eu preciso é de um comando que leia o arquivo, encontre a linha que tem determinada palavra e insira uma linha logo abaixo ou acima da linha que contém essa palavra. Tentei usar o sed, mas ainda não consegui. Agradeço se alguém puder me ajudar.


  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 05/02/2010 - 22:10h

O sed tem dois comandos que servem para fazer a inserção de linhas do jeito que você está querendo.

Usando o comando 'i' a linha e' inserida antes do endereço e o comando 'a' a linha é inserida
após o endereço.

Se a palavra for word, então faça:

$ cat teste.txt
1
2
word
4
5

$ sed '/word/i linha antes' teste.txt
1
2
linha antes
word
4
5

$ sed '/word/a linha depois' teste.txt
1
2
3
word
linha depois
4
5

Para alterar diretamente o arquivo teste.txt use a opção -i do sed.
t+

3. Re: Como inserir um texto num lugar específico de um aquivo pela linha de comando? [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 05/02/2010 - 10:55h




Cara, a principio é bem fácil, só não conheço um comando que faça isso, não digo que não exista, mas eu não conheço.
Agora um scriptzinho é moleza:

!!!MAS ATENCAO!!!

Você disse para encontrar uma palavra X, esteja certo de só existir uma palavra dessa no seu arquivo inteiro, se não... vai dar tudo errado!
Para implantar outros controle precisaria entender melhor sua necessidade.

Boa sorte!!


#script
#
# PARAMETROS
#----------------------------------------------
arquivo="nome_arquivo"
palavra="sua_palavra"
posicao="d" # a - antes
# d - depois
linha_a_inserir="linha que vc quer inserir"

# CODIGO
#----------------------------------------------
while read line
do
controle=`echo $line | grep $palavra$ | wc -l`
if [ $controle -lt 1 ]; then
echo $line >> $arquivo.work
elif [ $posicao = "a" ]; then
echo $linha_a_inserir >> $arquivo.work
echo $line >> $arquivo.work
elif [ $posicao = "d" ]; then
echo $line >> $arquivo.work
echo $linha_a_inserir >> $arquivo.work
fi
done < $arquivo
cp $arquivo.work $arquivo
rm $arquivo.work

#-----------------------------------Fim--------


4. Re: Como inserir um texto num lugar específico de um aquivo pela linha de comando? [RESOLVIDO]

toninho
gem

(usa Debian)

Enviado em 05/02/2010 - 17:29h

Obrigado fdmarp. O script funcionou beleza. Só que o arquivo que quero editar é muito grande, por isso demora muito pra editar cada um.
Explicando o que eu quero fazer: Preciso editar o arquivo squid.conf e criar uma acl liberando um terminal específico da minha rede. Como o squid.conf trabalha com regras eu tenho que inserir a linha num lugar específico pra que ela não seja bloqueada pelas regras que existem mais abaixo no arquivo. Vou continuar procurando uma maneira de fazer via linha de comando.


5. Re: Como inserir um texto num lugar específico de um aquivo pela linha de comando? [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 05/02/2010 - 18:23h

Bom carinha, pena que não deu certo ... e se você usar o sed ... será que vai mais fácil

tipo assim:

sed -e 's/linha_de_referencia/linha_nova\nlinha_de_referencia/' arquivo

ex:
#arquivo
aaaa
bbbb
cccc
dddd

sed -e 's/cccc/linha_nova\ncccc/' arquivo

resultado:
aaaa
bbbb
linha_nova
cccc
dddd

se for depois ... e so inverter
sed -e 's/cccc/cccc\nlinha_nova/' arquivo
aaaa
bbbb
cccc
linha_nova
dddd

espero que melhore um pouco








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts