example.txt está abaixo
Restaurant: McDonalds
City: Miami
State: Florida
Address: 123 Biscayne Blvd
Phone: 911
Restaurant: 5 guys
City: Atlanta
State: Georgia
Address: 123 Peachtree Rd
Phone: 911
Restaurant: KFC
City: NYC
State: NY
Address: 123 Madison Square
Phone: 911
Estou usando o script bash e digamos que eu quero procurar um restaurante pelo nome no arquivo acima. Peça à entrada do usuário o nome do restaurante e ele deverá imprimir as informações sobre esse restaurante (5 linhas).
awk '/McDonalds/> /KFC/' example.txt
Eu sei que a linha de código acima imprimirá toda a linha que corresponde ao padrão "McDonalds" e "KFC", mas que apenas imprimirá a 1ª linha do arquivo de texto, mas não o restante das informações sobre esse restaurante. Como posso dizer para imprimir todas as informações (5 linhas) apenas da entrada do usuário do nome do restaurante?
Usando
sed
:Explicação
Esta é a
sed
função básica , você pode consultar SCRIPTS ÚNICOS ÚTEIS PARA SEDfonte
O comando acima obterá e imprimirá as 4 linhas consecutivas, juntamente com a linha atual, porque foi alimentada em um loop for. O padrão de pesquisa
$2=="KFC"
ajudará a obter uma linha específica das várias linhas.fonte
Outra solução possível:
fonte
{if($1=="KFC")print $0}
podem ser condensados apenas$1 == "KFC"
, uma vez que a ação padrão para uma condição verdadeira é imprimir o registro.É suficiente imprimir da linha que contém o nome que você quer, até a última linha que contém a palavra
Phone
(supondo que todas as entradas sigam o mesmo padrão e sempre terãoPhone
como registro final)Se quiséssemos complicar um pouco, poderíamos imprimir exatamente 5 linhas após a partida, assim:
A
stop
variável não será definida, portantoNR<=stop
, não imprimirá nada, até que a/McDonalds/{stop=NR+5;}
parte realmente defina a variável, e isso só acontecerá quando encontrarmos a correspondência.fonte