我是awk脚本的新手。我需要帮助找出解析makefile的方法。
以下是我的示例make文件。我使用"进行测试"运行我的测试。所有测试文件列在" LTESTS ="下。在这里,我只列出了3个文件(connect,proxy-connect,connect-privsep),但实际上我有70个文件。如何获取" LTESTS ="。
中列出的所有文件我搜索但无法找到提取的方法。谢谢你的帮助。
REGRESS_TARGETS= t-exec
tests: prep $(REGRESS_TARGETS)
prep:
test "x${USE_VALGRIND}" = "x" || mkdir -p $(OBJ)/valgrind-out
LTESTS= connect \
proxy-connect \
connect-privsep
t-exec: ${LTESTS:=.sh}
@if [ "x$?" = "x" ]; then exit 0; fi; \
for TEST in ""$?; do \
echo "run test $${TEST}" ... 1>&2; \
(env SUDO="${SUDO}" TEST_ENV=${TEST_ENV} ${TEST_SHELL} ${.CURDIR}/test-exec.sh ${.OBJDIR} ${.CURDIR}/$${TEST}) || exit $$?; \
done
答案 0 :(得分:0)
您可以像这样重写字段分隔符:
awk 'BEGIN {
FS = "[ \t=]*(\\\\[ \t]*\r?\n[ \t]*)?"
RS = ""
}
$1 == "LTESTS" {
for(i=2;i<=NF;i++) print $i
}
' Makefile
请注意RS = ""
表示在LTESTS之前和之后需要一个空行。
输出:
connect
proxy-connect
connect-privsep
答案 1 :(得分:0)
$ awk 'sub(/.*LTESTS=/,""){f=1} !NF{f=0} f{print $1}' file
connect
proxy-connect
connect-privsep
或者如果在LTESTS块之后没有空行:
awk 'sub(/.*LTESTS=/,""){f=1} f{print $1; if (!/\\/) exit}' file