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!








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts