删除shell

时间:2015-10-06 22:51:07

标签: shell awk sed grep cut

我有一个变量var=/usr/local/bin/test/exec

现在我必须删除上面变量中的最后2个字符串:

var=/usr/local/bin/

并且在删除最后2个字符串后,我必须在shell循环中使用此变量'var'。

试过:

  var='/usr/local/bin/test/exec'
  echo ${var#$(dirname "$(dirname "$s")")/}

输出:

test/exec

我将截断的部分作为输出,但我期待部分的其余部分不是截断的部分

任何建议

4 个答案:

答案 0 :(得分:1)

您可能对shell的内部子字符串处理运算符感兴趣:%%%###。观察:

#!/bin/sh

var=/usr/local/bin/test/exec

# use shell substring processing to cut the variable down to size:

var="${var%/*}"
var="${var%/*}"

echo "$var" 

# Manipulate the resulting string in a loop
for i in 1 2 3
do echo "${var}${i}"
done

答案 1 :(得分:0)

一些谷歌搜索后确定我找到了解决方案:

var1="$(echo $var | cut -d '/' -f-4)"

答案 2 :(得分:0)

如果您不知道字段数,则有一个标准的awk解决方案。但是,我将使用rev

显示另一个技巧
var='/usr/local/bin/test/exec'; echo $var | rev | cut -d/ -f3- | rev

将给出

/usr/local/bin

答案 3 :(得分:0)

你也可以尝试这种方法

var=/usr/local/bin/test/exec

sed 's_\(.*\)/.*/.*$_\1_' <<< $var

另一种方法

sed 's_\(.*\)\(/.*\)\{2\}$_\1_' <<< $var

<强>输出:

/usr/local/bin