Grep todo o corpo de uma função

4

Suponha que eu saiba que someFile.php contém a definição para someFunction() . Como eu iria mostrar todo o corpo da função no stdout? Se eu sei que o corpo tem 10 linhas de comprimento, então eu usaria cat someFile.php | grep -A 10 "function someFunction" [1], mas na realidade a função poderia ter qualquer tamanho arbitrário.

Eu percebi que com sed eu poderia usar comandos Vimesque como /function someFunction<Return>/{<Return>% [2], mas não consigo descobrir exatamente como formatá-lo. Idealmente, o PHPDoc antes da função seria enviado junto com a função.

Qualquer ajuda ou links para o bom manual apropriado seria apreciado. Obrigado!

[1] Eu sei que o cat é redundante, mas acho esse formato mais fácil de ler.

[2] Encontre a definição da função, vá para a chave de abertura, vá para a chave de fechamento

    
por dotancohen 27.11.2012 / 23:34

1 resposta

5

Identifique uma expressão regular que ocorre no final da função, mas não em seu corpo. ^} provavelmente funcionará.

sed –n '/function someFunction/,/^}/p' someFile.php

Obviamente, se o PHPDoc antes da função começar com alguma string única, você usaria isso em vez de /function someFunction/ . Caso contrário, não é tão fácil; pode ser possível com awk .

    
por 27.11.2012 / 23:50

Tags