Bash:使用SED命令替换变量的值(变量包含路径)

时间:2017-11-07 12:12:28

标签: bash shell sed

我有4个脚本(3个用bash和1个py),包含变量path = / some / path

我需要用其他路径替换该路径,但我找不到如何做到的方法。这是我现在的代码:

#!/bin/bash

path=${PWD}

#Replace path in scripts
sed -i -e "s|path=.*|path=${path}|g" "${path}/scripts/test.sh"

但是这段代码并不仅仅取代了我的var的内容。它取代了所有出现的"路径"在test.sh内它也取代了这个

"${f##*/}"

输出$ {PWD}(对于这个,我真的不明白为什么)。

编辑:来自test.sh的部分代码

#!/bin/bash

path=${HOME}/project
pic_path=${path}/test_plan/tests/*
log_name=results_$(date +'%d-%m-%y-%T').log
log_path=${path}/test_plan/logs/${log_name}
csv_name=results_$(date +'%d-%m-%y-%T').csv
csv_path=${path}/test_plan/test_results/${csv_name}
filename_no_path="${f##*/}"

运行上述脚本后,所有内容都变为:

path=/home/name/project
pic_path=/home/name/project
log_name=results_$(date +'%d-%m-%y-%T').log
log_path=/home/name/project
csv_name=results_$(date +'%d-%m-%y-%T').csv
csv_path=/home/name/project
filename_no_path=/home/name/project


sed --version : sed (GNU sed) 4.4

1 个答案:

答案 0 :(得分:4)

只需在搜索表达式前添加^即可将替换限制为从该行开始的模式。

sed -i -e "s|^path=.*|path=${path}|g" "${path}/scripts/test.sh"

结果应符合您的期望:

path=/tmp
pic_path=${path}/test_plan/tests/*
log_name=results_$(date +'%d-%m-%y-%T').log
log_path=${path}/test_plan/logs/${log_name}
csv_name=results_$(date +'%d-%m-%y-%T').csv
csv_path=${path}/test_plan/test_results/${csv_name}
filename_no_path="${f##*/}"