Bash中如何替换shell脚本最后一行的qmake路径字段
Shell脚本提取字段并替换qmake路径实现方案
你不需要复杂的逻辑就能完成提取首字段+路径替换的需求,以下是可直接用的实现方式:
提取最后一行第一个字段的两种方法
- 方法1:awk直接提取(最简洁推荐)
按空格分割取第一个字段是awk的基础能力,不需要额外的字符串处理逻辑,一行命令就能拿到结果:# 先定位到你要修改的目标脚本路径 target_script=$(find ${QT_ROOT}/android* -maxdepth 0 -type d | sort -r | head -1)/bin/qmake # 提取脚本最后一行按空格分割的第一个字段,也就是原qmake路径 old_qmake_path=$(tail -n 1 "$target_script" | awk '{print $1}') - 方法2:read命令分割实现
如果要按你原本的思路用read做分割,注意read默认按空白字符分割内容,第一个传入的变量会接收分割后的第一个字段,剩余所有内容会赋值给最后一个变量,记得加-r参数避免反斜杠被自动转义:last_line=$(tail -n 1 "$target_script") read -r old_qmake_path rest_content <<< "$last_line"
路径替换实现
拿到原qmake路径之后,直接用sed做原地替换即可,不需要逐行重写脚本:
# 定义你要替换的新qmake路径 new_qmake_path="/opt/qt/6.2.4/gcc_64/bin/qmake" # 原地替换脚本中以旧qmake路径开头的内容 sed -i "s|^${old_qmake_path} |${new_qmake_path} |" "$target_script"
注意sed这里用
|作为分隔符,而不是默认的/,是为了避免路径中自带的/需要大量转义的问题,写法更简洁不易出错。
另外你给出的目标脚本示例里新路径写为/opt/qt/6.2.4/gcc_64/binqmake,bin和qmake之间少了路径分隔符/,替换时注意核对路径正确性。
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

