Bash脚本如何从配置文件指定行提取证书文件名?
提取配置文件指定行的证书文件名并赋值给变量
以下几种方法都能实现需求,你可以根据习惯选择:
方法1:sed + awk 组合(最直观)
先定位到第75行,再按斜杠分割取最后一个字段(文件名):
CERT_FILE=$(sed -n '75p' config.cfg | awk -F '/' '{print $NF}')
$NF是awk的内置变量,代表当前行的最后一个字段,比固定写$4更灵活——哪怕路径层级变化,也能准确拿到文件名。
方法2:仅用awk(一步到位)
直接指定处理第75行,同时完成分割和提取:
CERT_FILE=$(awk -F '/' 'NR==75 {print $NF}' config.cfg)
NR==75表示只处理第75行,逻辑和方法1一致,只是少了一次管道调用。
方法3:用basename工具(更贴合文件名提取场景)
先把行按等号分割拿到完整路径,再用basename直接提取文件名:
CERT_FILE=$(sed -n '75p' config.cfg | cut -d '=' -f2 | basename)
cut -d '=' -f2是把行分成两部分,取等号后面的路径部分,basename专门用来从路径中剥离文件名,逻辑更清晰。
为什么你之前的命令没成功?
awk -F "/" '{print $4}' config.cfg:这个命令会处理文件所有行,且固定取第4个字段——如果路径层级变化(比如多一层或少一层目录)就会出错,而且没指定只处理第75行。grep -o *.cer config.cfg:这里的*.cer是shell通配符,不是正则表达式,正确的写法应该是grep -o '[^/]*\.cer',但这个命令会匹配文件中所有符合的证书文件名,无法限定只取第75行的内容。
赋值变量后,你可以用echo $CERT_FILE验证结果,确认是thecert.cer就可以在脚本里直接使用这个变量了。
内容的提问来源于stack exchange,提问作者adavies169
相关产品推荐
相关产品推荐

