You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用awk解析Makefile提取LTESTS中的测试文件

用awk提取Makefile中LTESTS的所有测试文件

嘿,作为awk新手想要搞定Makefile里的LTESTS提取,这事儿不难!针对你那种用反斜杠换行的LTESTS格式,我给你两个实用的awk方案,保证能把70个测试文件都揪出来~

方案1:逐行合并反斜杠结尾的内容

这个命令会先把所有属于LTESTS的行(包括反斜杠换行的后续行)合并成一行,再提取所有测试文件名:

awk '/^LTESTS=/{flag=1; sub(/^LTESTS=/, "");} flag{gsub(/\\$/, ""); printf "%s", $0; if (!/\\$/) flag=0;} END{print ""}' Makefile | xargs -n1

命令拆解:

  • /^LTESTS=/:匹配到以LTESTS=开头的行时,开启标记flag=1,同时用sub去掉行首的LTESTS=前缀
  • 当flag生效时:
    • gsub(/\\$/, ""):去掉行尾的反斜杠(这是Makefile里的换行延续标记)
    • printf "%s", $0:把当前行内容拼接到输出里(不换行)
    • if (!/\\$/) flag=0:如果当前行没有反斜杠结尾,说明LTESTS的内容已经结束,关闭标记
  • END{print ""}:最后补个换行,避免输出粘在一起
  • 管道后的xargs -n1:把所有空格分隔的测试文件名拆成每行一个,方便查看

方案2:自定义记录分隔符简化处理

这个写法更简洁,利用awk的记录分隔符RS直接合并反斜杠换行的行:

awk 'BEGIN{RS="\\\n"; ORS=" "} /^LTESTS=/{sub(/^LTESTS=/, ""); print $0} END{print "\n"}' Makefile | xargs -n1

命令拆解:

  • BEGIN{RS="\\\n"; ORS=" "}:设置记录分隔符为「反斜杠+换行」,这样所有用反斜杠连接的行都会被当成一个完整记录;输出分隔符设为空格,保证合并后的内容用空格分隔
  • /^LTESTS=/:匹配到目标行后,去掉LTESTS=前缀并打印内容
  • END{print "\n"}:最后补换行,让输出更规整
  • 同样用xargs -n1把结果拆成每行一个文件名

测试效果

用你给的示例Makefile测试,运行任意一个命令都会输出:

connect
proxy-connect
connect-privsep

换成你有70个测试文件的真实Makefile,也能一次性把所有文件名都提取出来~

内容的提问来源于stack exchange,提问作者kavitha R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:18:43