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

时间:2018-10-25 22:28:05

标签: 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 

我该怎么做?

1 个答案:

答案 0 :(得分:0)

做到这一点的一种方法是:

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