我正在编写一个shell脚本,在这个脚本中,我通过java获得java的位置。作为回应,我得到(例如)
/usr/pi/java7_32/jre/bin/java。
我需要切割路径,以便以/jre/结尾,更具体地说
/usr/pi/java7_32/jre/由于程序提供了这些信息,无法处理长路径的工作。
我使用了/ as分隔符的剪切,并且我认为Java安装的目录总是相同的,因此
cut -d'/' -f1-5为了得到这个结果,我们做得很好:
/usr/pi/java7_32/jre/但是,由于java也可以安装在其他地方,例如
/usr/java8_64/jre/该语句将无法正常工作。
我需要尝试sed,awk,cut和不同的组合,但是没有找到我喜欢的答案。
正如标题说的那样,我会数一数汽车/的数量,直到在外壳从左到右计数的前提下找到减去的jre/。
递增的数字将是我希望通过使用分隔符进行切割而看到的字段。
path=$(which java) # example: /usr/pi/java7_32/jre/bin/java
i=0
#while loop with a statment which would go through path
while substring != jre/ {
if (char = '/')
i++
}
#cut the path
path=$path | cut -d'/' -f 1-i
#/usr/pi/java7_32/jre result 问题是路径前后的最终差异。
/java7_64/jre/, like */java*/jre/我对任何想法和解决方案都持开放态度,非常感谢!
欢迎简
发布于 2019-08-23 15:19:32
您可以使用shell的内置参数操作来获得所需的内容。(这将省去创建其他流程以提取所需信息的需要)。
jpath="$(which java)"
# jpath now /usr/pi/java7_32/jre/bin/java
echo ${jpath%jre*}jre产生
/usr/pi/java7_32/jre同样的作品
jpath=/usr/java8_64/jre/%表示从字符串的右侧删除匹配的shell reg模式。然后,我们将jre放回您所需的路径。
您可以覆盖来自which java的值
jpath=${jpath%jre*}jreIHTH
发布于 2019-08-23 15:15:03
您可以通过grep获得结果:
path=$(echo $path | grep -o ".*/jre/")https://stackoverflow.com/questions/57628558
复制相似问题