如何从包含它们的c文件中提取标题?
#include <tema4header9.h>
#include <tema4header3.h>
#include <stdio.h>
#include <longnametest/newheader.h>
#include <net/header.h>
#include "last-test-Zhy3/DrRuheader.h"
#include <last-test-8fF7/a5xyheader.h>
我试图使用:
sed -n -e 's/#include[ \t]*[<"]\([^ \/<"]*\/[^ \/]*\)\.h[">]/\1\.h/p'
但它只适用于子目录中的那些。如果我输入:
sed -n -e 's/#include[ \t]*[<"]\(([^ \/<"]*\/)+[^ \/]*\)\.h[">]/\1\.h/p'
或
sed -n -e 's/#include[ \t]*[<"]\(([^ \/<"]*\/)*[^ \/]*\)\.h[">]/\1\.h/p'
该命令不再起作用。输出文件应如下所示:
tema4header9.h
tema4header3.
stdio.h
longnametest/newheader.h
net/header.h
last-test-Zhy3/DrRuheader.h
last-test-8fF7/a5xyheader.h
答案 0 :(得分:2)
grep
解决方案:这是使用perl正则表达式,并在以"<"
开头的行上'"'
或#include
之间打印任何内容。
grep -oP '^#include.*(<|")\K.*(?=>|")' headers
tema4header9.h
tema4header3.h
stdio.h
longnametest/newheader.h
net/header.h
last-test-Zhy3/DrRuheader.h
last-test-8fF7/a5xyheader.h
如果您对awk
感到满意:
awk '/#include/{gsub(/<|>|"/,"",$2);print $2}' headers
tema4header9.h
tema4header3.h
stdio.h
longnametest/newheader.h
net/header.h
last-test-Zhy3/DrRuheader.h
last-test-8fF7/a5xyheader.h
答案 1 :(得分:0)
这应该有效:
sed -nr 's/#include\s+[<"]([^>"]+)[>"].*/\1/p'
答案 2 :(得分:0)
尝试:
awk '{match($0,/[<"].*[>"]/);print substr($0,RSTART+1,RLENGTH-2)}' Input_file