como usar uma variável no regex no awk?

5

Eu quero usar uma variável em regex brace
mas parece que não funciona.

$ echo 'abcabcabc' | awk  '{ sub(/(abc){2}/,"XXX");  print }'
XXXabc

# this is not a correct result.
$ echo 'abcabcabc' | awk  '{ i=2; sub(/(abc){i}/,"XXX");  print }'
abcabcabc

$ echo 'abcabcabc' | awk  '{ if (/(abc){3}/)  print "ok" }'
ok

# this does not work correctly.
$ echo 'abcabcabc' | awk  '{ i=3; if (/(abc){i}/)  print "ok" }'
    
por mug896 22.01.2017 / 13:25

1 resposta

5

/.../ suporta apenas constantes Regex. Para passar uma variável, você precisa usar aspas:

% echo 'abcabcabc' | awk  '{ i=2; sub("(abc){"i"}","XXX");  print }'
XXXabc
  • O padrão Regex antes da variável é colocado entre aspas, "(abc){"i

  • Em seguida, a variável i é usada

  • O padrão após a variável é novamente colocado entre aspas

por 22.01.2017 / 13:29