Note que com zsh
, você pode fazer:
printf '%s() {\n%s\n}\n\n' ${(kv)functions[(R)*gitignore*]}
Para recuperar as informações das funções atualmente definidas (isso não inclui os comentários, obviamente).
Agora, se você quiser extrair as informações do arquivo de origem, não poderá fazê-lo de maneira confiável, a menos que implemente um analisador de shell completo.
Se você puder fazer alguma suposição sobre como suas funções são declaradas, como por exemplo, se você sempre usa essa definição de função ksh-style, com function
e }
no início da linha, você poderia fazer:
perl -l -0777 -ne 'for (/^function .*?^\}$/gms) {
print if /gitignore/}' ~/.bashrc
ou para procurar apenas no corpo da função:
perl -l -0777 -ne 'for (/^function .*?^\}$/gms) {
print if /\{.*gitignore/s}' ~/.bashrc