Assumindo que o arquivo está sintaticamente correto, você poderia formatá-lo com indent
e tornar o processo para localizar e extrair a função muito mais simples:
- com
indent
, você pode criar o nome da função na primeira coluna de uma linha, seguido por um parêntese esquerdo e - depois disso, a próxima chave direita
'}'
aparecendo na primeira coluna encerraria a função.
Aqui está um exemplo simples usando o GNU indent
e awk
:
#!/bin/sh
# $1 = file name
# $2 = function name
indent -st -orig "$1" | awk '
BEGIN { state = 0; last = ""; }
$0 ~ /^'$2'\(/ { print last; state = 1; }
{ if (state == 1) print; }
$0 ~ /^}/ { if (state) state = 2; }
{ last = $0; }
'