我在文件(file.sh)中有两行:
gc=$(sudo /usr/lib/jvm/java-8-openjdk-amd64/bin/jstat -gc $pid | tail -1 | sed -e 's/[ ][ ]*/ /g')
gccapacity=$(sudo /usr/lib/jvm/java-8-openjdk-amd64/bin/jstat -gccapacity $pid | tail -1 | sed -e 's/[ ][ ]*/ /g')
使用命令行,我想替换路径,其余部分保持原样。我想通过使用'$ JAVA_HOME'bin / jstat
替换路径我希望结果是:
gc=$(sudo /usr/lib/jvm/java-9-openjdk-amd64/bin/jstat -gc $pid | tail -1 | sed -e 's/[ ][ ]*/ /g')
gccapacity=$(sudo /usr/lib/jvm/java-9-openjdk-amd64/bin/jstat -gccapacity $pid | tail -1 | sed -e 's/[ ][ ]*/ /g')
我不想添加原始行的完整路径,因为我不知道已经安装了哪个版本。我只知道它将以
开头/usr/lib/jvm/
编辑:感谢@ Walter-a
**ubuntu@ubuntu:~$** echo $JAVA_HOME
/usr/lib/jvm/java-11-oracle
**ubuntu@ubuntu:~$** cat test.sh
gc=$(sudo /usr/lib/jvm/java-9-openjdk-amd64/bin/jstat -gc $pid | tail -1 | sed -e 's/[ ][ ]*/ /g')
**ubuntu@ubuntu:~$** sed -r "s#(sudo ).*(/bin/jstat)#\1${JAVA_HOME}\2#" test.sh
gc=$(sudo /usr/lib/jvm/java-11-oracle/bin/jstat -gc $pid | tail -1 | sed -e 's/[ ][ ]*/ /g')
答案 0 :(得分:0)
您可以像这样使用sed
:
sed "s#/usr/lib/jvm/java[^/]*/#/\"${JAVA_HOME}\"#g" file.sh
我将#
用作s
命令的定界符,因为/
是正则表达式的一部分。
答案 1 :(得分:0)
查看要匹配的部分。
sed -r "s#(sudo /usr/lib/jvm/).*(/bin/jstat)#\1${JAVA_HOME}\2#" file.sh