按功能名称在函数体内部进行grep

时间:2015-10-20 15:45:45

标签: linux grep

使用功能名称功能体中是否有任何技巧?此外,我想使用正则表达式而不是完整的函数名称。

例如 :Linux内核驱动程序中有许多名称为" xxx_probe"的函数。所以,我想在所有这些函数中搜索一些字符串。

4 个答案:

答案 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)

grep的

-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 "}