Várias opções aqui:
-
pat1, pat2 tratado como regexps:
pat1="A sentence here" pat2='\*{58}' export pat1 pat2 awk '$0 ~ ENVIRON["pat1"], $0 ~ ENVIRON["pat2"]'Observe que
mawke versões degawkanteriores a 4.0.0 não suportam o operador de expressão regular estendida{}. Para versões antigas degawk, você pode passar a variável de ambientePOSIXLY_CORRECTpara reconhecê-la.Aqui, use a abordagem
start-condition, end-condition [{action}], mas você pode fazer o mesmo com a abordagempflag. -
pat1, pat2 tratado como sequências fixas:
pat1="A sentence here" pat2=$(printf '*%.0s' {1..58}) export pat1 pat2 awk 'index($0, ENVIRON["pat1"]), index($0, ENVIRON["pat2"])'Aqui,
index()procura a agulha (o conteúdo da variável) em qualquer lugar do palheiro (o registro atual (linha)), mas você também pode fazer comparação simples de linha completa:awk '"" $0 == ENVIRON["pat1"], "" $0 == ENVIRON["pat2"]'(o
""deve forçar uma comparação de string mesmo nos casos em que ambos$0eENVIRON["patx"]sejam numéricos).
Evite usar -v para passar dados que possam conter caracteres de barra invertida, pois awk faz alguma sequência de escape C ( \n , \b , \ ...) processando neles, então é necessário escapar das barras invertidas. O mesmo vale para variáveis passadas como awk '...code...' awkvar="$shellvar" . Use ENVIRON ou ARGV .
Veja esta resposta a uma questão relacionada para mais detalhes.