使用功能名称在功能体中是否有任何技巧?此外,我想使用正则表达式而不是完整的函数名称。
例如 :Linux内核驱动程序中有许多名称为" xxx_probe"的函数。所以,我想在所有这些函数中搜索一些字符串。
答案 0 :(得分:2)
您可以使用pcregrep
:
pcregrep -M "(?s)int foo_probe.*?(?=^\}$)" somefile.c
这将以“int foo_probe”开始搜索,然后在仅包含“}”的下一行结束。 (?s)
将文件视为一行,以便.
匹配换行符。
从那里,很容易将它传递给第二个grep:
pcregrep -M "(?s)int foo_probe.*?(?=^\}$)" somefile.c | grep something
我不知道内核源文件是什么样的,所以可能需要一些调整......
答案 1 :(得分:0)
-A num
选项可能会有所帮助。它将在匹配行后打印num
行尾随上下文。
grep "xxx_probe(" -A after-context-num | grep "search-str"
答案 2 :(得分:0)
此解决方案不仅使用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')
您明白了。
答案 3 :(得分:0)
这对我有用。 只需给function_name一个等于您要搜索的函数名称的字符串值,然后用该功能块中的估计行数替换5即可。
function_name="foo"
grep -A 5 -m 1 -h "ERROR\]: $function_name" $papiFileName |
grep -B 5 "}