我试图从matlab代码中提取注释行。
%% header comments
% description of function
% explanations of args
%...
function out = myfunc(in)
...
% in-code comment
...
%%
我尝试了grep "^%" *.m
,但它输出了所有注释行。
我只想在头脑中发表评论
%% header comments
% description of function
% explanations of args
%...
所以,它应该在function out = myfunc(in)
之前停止。前面的空格和空行被忽略了。
我该怎么做?
答案 0 :(得分:1)
要在function
关键字之前提取所有评论,您可以使用sed
进行两级过滤:
sed -n '1,/^function/{/^%/p}' file
对于所有行(从第一行)到function
,只打印那些以注释字符%
开头的行(跳过非注释和空行)。
详细。第一部分n,/regex/
是range address,起始地址在行1
中,结束地址在第一行(1
之后)以{{1开头字符串。
如果无法保证function
,则可以使用function
或[[:alnum:]]
。在GNU [[:alpha:]]
上,可以使用单词字符的其他名称sed
。
第二部分\w
仅针对先前选择(寻址)的行执行。 {/regex/ p}
(打印)操作仅针对以p
开头的行执行。
另请注意%
标记:默认情况下,它会阻止-n
打印每一行。仅使用明确的sed
操作打印行。
示例:
p
结果:
$ cat file
%% header comments
% description of function
% explanations of args
% date: ...
% author: ...
function out = myfunc(in)
...
% in-code comment
...
%%
答案 1 :(得分:0)
您可以使用awk
在看到评论时开始打印,并在第一个非评论行退出:
$ awk '/^%/{f=1} /^[^%]/{exit} f' file
%% header comments
% description of function
% explanations of args
%...