我的shell脚本中有以下字符串。 的 /usr/java/jdk1.8.0_77/jre/bin/java 将其拆分为 /usr/java/jdk1.8.0_77/jre
的最佳方式是什么?答案 0 :(得分:1)
#! /bin/sh
path=/usr/java/jdk1.8.0_77/jre/bin/java
short_path="${path%/bin*}"
echo $short_path
此处有更多字符串操作示例: http://tldp.org/LDP/abs/html/string-manipulation.html
答案 1 :(得分:0)
如果您正在寻找awk
解决方案,可以选择其中一种方法(类似于sed
)
$ echo /usr/java/jdk1.8.0_77/jre/bin/java |
awk '{sub("/[^/]+/[^/]+$","")}1'
/usr/java/jdk1.8.0_77/jre
请注意,这是通用的,因为它会削减路径中的最后两个级别。
答案 2 :(得分:0)
使用awk
,如果您可以正确设置输入和输出分隔符,则解决方案变得直观:
echo /usr/java/jdk1.8.0_77/jre/bin/java | awk '{ NF -= 2 } 1' FS=/ OFS=/
输出:
/usr/java/jdk1.8.0_77/jre
awk
隐式地将其输入拆分为FS
字符串(或具有某些版本的awk
的模式)。字段数存储在NF
变量中;从NF
减去两个会导致从最后两个元素中删除。最后的1
调用默认代码块:{ print $0 }
。