使用sed替换使用环境变量的复杂行



我有一个文件:foo

文件有一行:

JVMDATA="$(${TIMEOUT} sudo /usr/lib/jvm/jdk1.8.0_92/bin/java -jar ${JVMINSPECTOR} ${PID} 2>&1)"

我想将/usr/lib/jvm/jdk1.8.0_92/bin/java替换为:

JAVA_HOME/bin/java 

我该怎么做?

一种方法可以是:

sed -e 's|/usr/lib/jvm/jdk1.8.0_92/bin/java|JAVA_HOME/bin/java|'  original.txt  > new.txt
cp original.txt original.txt.sav
mv new.txt original.txt

这使用sed模式替换s/old/new/。通常情况下,斜杠是一种痛苦,因为你需要逃离它们。在我的系统上,sed容忍垂直条形分隔符,这样可以使它更可读。我怀疑您会想将其更改为$JAVA_HOME(注意前面的美元符号(。

为了完整起见,这里有一个使用更常见的斜杠模式分隔符的版本:

sed -e 's//usr/lib/jvm/jdk1.8.0_92/bin/java/JAVA_HOME/bin/java/' original.txt > new.txt

最新更新