繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM