shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Inserir uma string em um ponto específico de um arqui


From: Fabiano Caixeta Duarte
Subject: Re: [shell-script] Inserir uma string em um ponto específico de um arquivo texto
Date: Tue, 27 Jan 2009 23:23:09 -0200

2009/1/27 fernando_gottlieb <address@hidden>

> Boa noite pessoal.
> Tenho um arquivo com o seguinte conteúdo:
>
> smartd: syslog
> smb: network syslog nmb
> xdm: syslog kbd acpid
> stopblktrace: apache2 boot.clock kbd fbset splash irq_balancer dbus
> Monitor: apache2 boot.clock kbd fbset splash irq_balancer dbus
> Network: apache2 boot.clock kbd fbset splash irq_balancer dbus
> TV_Finder: apache2 boot.clock kbd fbset splash irq_balancer dbus
>
> Esta é a maneira como o OpenSuSE descreve os serviços e cria as
> dependências de serviços para pôr ordem na inicialização.
>
> Preciso ordenar certos serviços de maneira mais precisa do que a
> ferramenta prevê.
>
> Monitor, Network e TV_Finder precisam estar nesta ordem e a maneira de
> fazer com que isto aconteça é colocar, no final da linha Network, a
> inscrição do serviço acima "Monitor".
>
> Isto serve apenas para explicar o que estou fazendo.
>
> Então, preciso encontrar uma string, localizar a última palavra nesta
> linha, verificar se outra string existe e se não existir, inserir a
> string conhecida, reescrevendo o arquivo.
>
> começando:
>
> cat .depend.start | grep 'Network:'
>
> Com isto eu localizo a linha do serviço.
> O que eu não sei:
> Como descubro o que está no final da linha?

Caso não exista a string procurada, como inserir no final da linha?
> Como fazer tudo isto reescrevendo o arquivo?
>
> Quero que fique claro que não preciso que façam para mim, só não sei
> que técnicas usar.
>
> Abraço à todos
>
> Fernando A. Gottlieb
>

Rascunho de algoritmo.

- Fazer um loop while para ler cada linha.
- Preencher um array com o conteúdo da linha, de forma que o primeiro
elemento do array será o alvo e os demais serão as dependências
- Para cada "palavra" encontrada no final do array, filtrar a linha que se
inicia com esta palavra
- Remover esta palavra do array e voltar ao passo anterior.
- Escrever todas as linhas (arrays) em um novo arquivo.

PS: isto poderá complicar ainda mais as dependências em uma segunda execução
do script.

Exemplo de implementação da primeira parte da idéia, que responde à primeira
pergunta formulada:

read <<< "Fabiano Caixeta Duarte"; ARRAY=($REPLY); echo
${ARRAY[${#ARRAY[@]}-1]}

- Cria um array com o resultado obtido pelo read.
- Ecoa o último elemento do array (length -1)

Importante. Nem precisa de grep pra fazer os filtros subsquentes. Basta usar
recursos do próprio bash: operador =~

-- 
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]