sed:保存输出并替换

时间:2016-05-31 16:12:33

标签: shell unix sed

我有一个包含一些变量的脚本。其中一个是专有路径 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

这里有两个问题

  1. 由于${mylocalpath}包含“/”,sed会尝试评估这些并抛出异常
  2. 我想将整个脚本捆绑在一个sed文件中(而不是运行sed两次)并将其作为

    执行
    sed -f sed_file myfile.sh
    

1 个答案:

答案 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