Tenho um arquivo de texto bem básico em uma máquina Linux que contém coisas como capítulos, diálogos e referências.
É assim que parece
Chapter: 1 One: Birds and Trees
Birds are beautiful and trees are amazing and
they are dependent on each other. Birds most of the time
choose to make their nests on trees since trees provide more
stability. One day the bird sat on a tree and said;
Bird: Oh my I'm so tired from all the flying, I should take a rest
Tree: Mr Bird, you seem tired, perhaps you should take some rest, and
here are some fruits to quench your thirst.
Bird: Oh thank you very much!
Reference: Chapter 1: birds and trees
Chapter: 2 Two: Trees and Fruits
Fruits are very delicious to eat and they are mostly found
in trees. Fruits contain essential vitamins, minerals and loads
of good fibers.
Reference: Chapter 2: trees and fruits
Este é o conteúdo do arquivo txt. Agora, digamos que eu estava procurando por quench
, eu estava pensando que começaria do número do Capítulo até a Referência. Então eu tentei com grep;
$ grep -A 5 -B 5 'quench' file.txt
No entanto, isso não produz a saída desejada. Eu esperava algo assim;
Chapter: 1 One: Birds and Trees
Birds are beautiful and trees are amazing and
they are dependent on each other. Birds most of the time
choose to make their nests on trees since trees provide more
stability. One day the bird sat on a tree and said;
Bird: Oh my I'm so tired from all the flying, I should take a rest
Tree: Mr Bird, you seem tired, perhaps you should take some rest, and
here are some fruits to quench your thirst.
Bird: Oh thank you very much!
Reference: Chapter 1: birds and trees
E também, pesquisar pela palavra "vitamina" retornaria;
Chapter: 2 Two: Trees and Fruits
Fruits are very delicious to eat and they are mostly found
in trees. Fruits contain essential vitamins, minerals and loads
of good fibers.
Reference: Chapter 2: trees and fruits
Eu queria saber se isso seria possível através do sed ou awk.
PS: Cada nova linha é uma nova linha de verdade
Uma
awk
ideia:Com
-v word="quench"
isso gera:Com
-v word="essential"
isso gera:Com
-v word="bubble"
, ou quando nenhuma-v word=...
cláusula é fornecida, isso gera:Usando Raku (anteriormente conhecido como Perl_6)
Certamente alguém postará uma resposta em Perl, mas aqui está uma resposta escrita em Raku (também conhecido como Perl6). O Raku fornece suporte de alto nível para Unicode, integrado.
Resumidamente, o arquivo é
slurp
editado ecomb
editado para localizar registros correspondentes (Capítulos). Então, na declaração final,grep
é usado para retornar apenas registros correspondentes (Capítulos). A entrada de amostra é a mesma fornecida pelo OP.Exemplo de saída:
Adicione chamadas para
trim
,trim-leading
outrim-trailing
na declaração final para remover os espaços em branco ao redor, conforme desejado.https://raku.org