作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在查看一个日志文件,它只告诉我文件名和文件中有错误的行号。我感兴趣的是了解封装功能。例如这里是日志文件的内容
Error: foo.file on line wxy
Error: foo.file on line xyz
.
.
.
这里是文件 foo.file 的内容
function abc_1234 (...)
.
.
.
endfunction
function def_442 ()
.
.
.
//Following line number is WXY
assign Z ==== X;
endfunction
function ghi(...)
.
.
.
//Following line number is XYZ
assign X = X;
endfunction
.
.
.
根据上面的日志文件,我想得到函数名 def
和 ghi
返回。我已经尝试了@larsks 提供的部分解决方案并添加了 [[::blank::]]
# look for function definitions and record the function name
# in the func_name variable
/function [[:alpha:]][[:alnum:]]*[[:blank:]]*([^)]*)/ {
func_name = substr($2, 1, index($2, "(")-1);
}
# when we reach the target line number, print out the current
# value of func_name
NR == target {
print func_name
}
它在 abc_1234 (...)
和 def_442 (...)
上失败,因为 (
之前有一个空格。我无法使上述工作
最佳答案
为了将行号映射到函数定义,您将需要遍历源文件以查找函数定义,然后在遇到目标行号时打印出当前定义。例如,像这样:
# look for function definitions and record the function name
# in the func_name variable. This looks for lines matching the pattern
# function <space> <identifier>(<anything>), and records the
# <identifier> part in func_name.
/function [[:alpha:]][[:alnum:]]* *([^)]*)/ {
func_name = $0
func_name = gensub("function *", "", 1, func_name)
func_name = gensub(" *\\(.*", "", 1, func_name)
}
# when we reach the target line number, print out the current
# value of func_name. In awk, the variable NR represents the
# current line number, and target is a variable we expect to be
# passed in on the command line.
NR == target {
print func_name
}
如果你把它放在一个名为 findline.awk
的文件中并像这样调用它:
awk -f findline.awk -vtarget=26 mysourcefile.src
然后它将打印包含第 26 行的函数的名称。编写的这个脚本不是非常健壮,但它希望能为您提供一些关于如何继续的想法。
参见 awk documentation有关 gensub
函数的详细信息。
关于linux - 如何从行号中查找封装函数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55224208/
我是一名优秀的程序员,十分优秀!