我有一个包含一些变量的脚本。其中一个是专有路径 MYPATH 我想保存 MYPATH 的输出,然后用相同的值替换另一个变量 SOME_OTHER_PATH 。
myfile.sh中的当前条目
MYPATH="/opt/local/custom/myfiles"
SOME_OTHER_PATH=""
我想要的输出
MYPATH="/opt/local/custom/myfiles"
SOME_OTHER_PATH="/opt/local/custom/myfiles"
我写的脚本就是这个
mylocalpath=`sed -n /^MYPATH/p' myfile.sh | sed -e 's/MYPATH/'`
sed -i -e "s/^SOME_OTHER_PATH/${mylocalpath}" myfile.sh
这里有两个问题
${mylocalpath}
包含“/”,sed会尝试评估这些并抛出异常我想将整个脚本捆绑在一个sed文件中(而不是运行sed两次)并将其作为
执行sed -f sed_file myfile.sh
答案 0 :(得分:2)
虽然我确信sed可以实现这一点,但我建议使用awk:
awk -F'"' '/^MYPATH=/ { path = $2 } /^SOME_OTHER_PATH=/ { $0 = $1 path "\"" } 1' file
当行以MYPATH
开头时保存路径到变量,并在行以SOME_OTHER_PATH
开头时使用它。最后的1
是最短的 true 条件,{ print }
是默认操作,因此每行都会打印出来。
要执行“就地”编辑,只需使用临时文件:
awk ... file > tmp && mv tmp file