首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用不同的定界符计数词中的字符

用不同的定界符计数词中的字符
EN

Stack Overflow用户
提问于 2019-08-23 14:46:47
回答 2查看 22关注 0票数 1

我正在编写一个shell脚本,在这个脚本中,我通过java获得java的位置。作为回应,我得到(例如)

/usr/pi/java7_32/jre/bin/java

我需要切割路径,以便以/jre/结尾,更具体地说

代码语言:javascript
复制
/usr/pi/java7_32/jre/

由于程序提供了这些信息,无法处理长路径的工作。

我使用了/ as分隔符的剪切,并且我认为Java安装的目录总是相同的,因此

代码语言:javascript
复制
cut -d'/' -f1-5

为了得到这个结果,我们做得很好:

代码语言:javascript
复制
/usr/pi/java7_32/jre/

但是,由于java也可以安装在其他地方,例如

代码语言:javascript
复制
/usr/java8_64/jre/

该语句将无法正常工作。

我需要尝试sed,awk,cut和不同的组合,但是没有找到我喜欢的答案。

正如标题说的那样,我会数一数汽车/的数量,直到在外壳从左到右计数的前提下找到减去的jre/

递增的数字将是我希望通过使用分隔符进行切割而看到的字段。

代码语言:javascript
复制
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 

问题是路径前后的最终差异。

代码语言:javascript
复制
/java7_64/jre/, like   */java*/jre/

我对任何想法和解决方案都持开放态度,非常感谢!

欢迎简

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-23 15:19:32

您可以使用shell的内置参数操作来获得所需的内容。(这将省去创建其他流程以提取所需信息的需要)。

代码语言:javascript
复制
jpath="$(which java)"
# jpath now /usr/pi/java7_32/jre/bin/java

echo ${jpath%jre*}jre

产生

代码语言:javascript
复制
/usr/pi/java7_32/jre

同样的作品

代码语言:javascript
复制
jpath=/usr/java8_64/jre/

%表示从字符串的右侧删除匹配的shell reg模式。然后,我们将jre放回您所需的路径。

您可以覆盖来自which java的值

代码语言:javascript
复制
jpath=${jpath%jre*}jre

IHTH

票数 0
EN

Stack Overflow用户

发布于 2019-08-23 15:15:03

您可以通过grep获得结果:

代码语言:javascript
复制
path=$(echo $path | grep -o ".*/jre/")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57628558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档