我在一个文件(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') 发布于 2019-02-19 06:15:13
看看你想要匹配哪些部分。
sed -r "s#(sudo /usr/lib/jvm/).*(/bin/jstat)#\1${JAVA_HOME}\2#" file.sh发布于 2019-02-19 04:55:18
您可以像这样使用sed:
sed "s#/usr/lib/jvm/java[^/]*/#/\"${JAVA_HOME}\"#g" file.sh我使用#作为s命令的分隔符,因为/是正则表达式的一部分。
https://stackoverflow.com/questions/54755140
复制相似问题