我有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
答案 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##*/}"