Como evito a síndrome do palito inclinado no awk?

5

Ao combinar padrões com / neles, ter que escapar do / rapidamente fica difícil, feio:

/\/usr\/share\/man\//

Com sed, perl ou Vim, usaria um delimitador diferente para a regex, digamos : :

sed '\:/usr/share/man/: do something'
perl -ne 'print if m:/usr/share/man/:'
:g:/usr/share/man/: do something " Vim

Como posso evitar esse problema? Algo como:

awk ':/usr/share/man/: {do something}'

O melhor que posso pensar é usar uma variável:

awk -v pat='/usr/share/man/' '$0 ~ pat {do something}'

Mas isso é muito detalhado em comparação com o método sed / perl / vim.

É claro que pode haver outras maneiras de combinar caminhos como /usr/share/man/ , mas esse não é o único lugar em que / pode aparecer em um padrão.

    
por muru 19.04.2017 / 04:45

2 respostas

1

Basta alterar /testregexp/ com $0 ~ "testregexp"

Exemplo simples:

$ echo "a/b/c" | awk ' ( $0 ~ "a/b/c" ) { print "we have a winner" ; }'
we have a winner

outro exemplo

regexp='some regexp "with /lots/ of double quotes" "everywhere"'
awk -v reg="${regexp}" ' ( $0 ~ reg ) { action here... }'
    
por 19.04.2017 / 18:03
0

Awk por si só não tem nenhum antídoto fácil e direto para isso. No caso geral, alternar para Perl (ou para sed para tarefas simples) é a solução alternativa comum.

    
por 19.04.2017 / 08:07