Editar somente a primeira ocorrência de uma palavra após encontrar outro termo específico. [RESOLVID

1. Editar somente a primeira ocorrência de uma palavra após encontrar outro termo específico. [RESOLVID

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 11/09/2019 - 08:42h

Exemplo de arquivo:
lista
bola
bola
boneca
bola
bola
boneca
bola
bola

Quero editar (comentar ou substituir, por exemplo) apenas a primeira ocorrência de "bola" que vem depois de "boneca".
De preferência usando "sed" ou "awk".

Resultado esperado:
lista
bola
bola
boneca
#bola
bola
boneca
bola
bola

Obs. Não necessariamente o termo "bola" vai ser a linha seguinte de "boneca". Pode estar em qualquer lugar!


  


2. Re: Editar somente a primeira ocorrência de uma palavra após encontrar outro termo específico.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 11/09/2019 - 22:03h

Ryuk escreveu:

Exemplo de arquivo:
lista
bola
bola
boneca
bola
bola
boneca
bola
bola

Quero editar (comentar ou substituir, por exemplo) apenas a primeira ocorrência de "bola" que vem depois de "boneca".
De preferência usando "sed" ou "awk".

Resultado esperado:
lista
bola
bola
boneca
#bola
bola
boneca
bola
bola

Obs. Não necessariamente o termo "bola" vai ser a linha seguinte de "boneca". Pode estar em qualquer lugar!

Boa noite Ryuk.
Consegui da seguinte maneira:
nlin=$(grep -n "" texto| sed -n '/boneca/{n;p;q}'|cut -d":" -f1)
sed "${nlin}s/^.*$/outrotexto/" texto => altera pelo numero da linha

sed -n '/boneca/{n;p;q}'|cut -d":" -f1 => Casa a linha requerida e "pega" o Numero dela...
Importante => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


3. Re: Editar somente a primeira ocorrência de uma palavra após encontrar outro termo específico.

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 12/09/2019 - 09:27h

Obrigado por responder, Marcelo. Mas, não era bem isso que eu estava procurando... Veja bem, no seu comando tem uma referência fixa (usando o "n" no sed) e isso "quebra" a solução caso o arquivo mude, entendeu!

O que eu preciso é procurar a primeira ocorrência da "palavra1", e depois dela procurar a primeira ocorrência da palavra2 (linha que será editada) que vem depois da palavra1. Porém, a "palavra2" não necessariamente será a primeira linha seguinte a da "palavra1", pode está na segunda linha, na terceira, ou em qualquer lugar. O que dificulta ainda mais é que tanto a palavra1, quanto a palavra2 se repetem várias vezes no arquivo e eu só quero mexer na primeira ocorrência de ambas, sacou!? Tá confuso, né... hehehe!!!

Comando: procura a primeira ocorrência de A ---> encontrando A, procura a primeira ocorrência de B após A ---> edita apenas a primeira ocorrência de B


4. Re: Editar somente a primeira ocorrência de uma palavra após encontrar outro termo específico.

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 13/09/2019 - 11:02h

Resolvi da seguinte maneira:
grep -n -A5 "palavra1" /local/arquivo.txt | grep -m1 "palavra2" | cut -d'-' -f1 

O primeiro grep encontra a "palavra1" e mostra 5 linhas posteriores, o "-n" me dar os números das linhas. Com o segundo grep procuro a "palavra2" e mostro apenas a primeira ocorrência (-m1). O cut pega o número da linha desejada! Agora posso editar com o sed, usando o número da linha como referência numa variável.

Se alguém tiver outra solução. Fico no aguardo!