[英]Bash: using SED command to replace the value of a variable (the variable contains a path)
我有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
只需在搜索表达式前添加一个^
即可将替换限制为该行开头的模式。
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##*/}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.