在shell脚本中拆分路径的末尾

时间:2016-03-29 10:03:50

标签: shell awk split

我的shell脚本中有以下字符串。 的 /usr/java/jdk1.8.0_77/jre/bin/java 将其拆分为 /usr/java/jdk1.8.0_77/jre

的最佳方式是什么?

3 个答案:

答案 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 }