这个解决方案不仅使用 grep,而且我认为它仍然有用。
给定这个函数的文本文件:
$ cat functions.txt
function bashfunction {
echo "bash function"
}
def python_function():
print('python function')
sub perl_fuction {
print "perl function\n";
}
如果您使用 grep 打印,您将获得 perl 和 python 打印:
$ grep print functions.txt
print('python function')
print "perl function\n";
如果你只想打印 perl 函数:
$ awk '/sub/,/^}$/' functions.txt | grep print
print "perl function\n";
如果你只想要 python 函数打印:
$ awk '/def/,/^$/' functions.txt | grep print
print('python function')
或者对于特定 bash 函数中的回声:
$ awk '/bashfunction/,/^}$/' functions.txt | grep echo
echo "bash function"
使用正则表达式:
$ awk '/bash[[:alpha:]]{8}/,/^}$/' functions.txt | grep echo
echo "bash function"
如果您的 awk 是 gawk,您可以使用简写运算符来获得更好的正则表达式:
$ gawk '/bash\S+\s{$/,/^}$/' functions.txt | grep echo
echo "bash function"
你也可以使用sed:
$ sed -n '/def/,/^$/p' functions.txt | grep print
print('python function')
你明白了。