Bash - 如何在字符串中删除第一个和最后一个斜杠?

时间:2018-04-14 05:24:13

标签: bash

获得最有效的方法是什么:

'a/b/c'

输出字符串可以是以下任何一种:

'/a/b/c/'
'a/b/c/'
'/a/b/c'
'a/b/c'

在bash脚本中?

4 个答案:

答案 0 :(得分:3)

我不知道“最有效”,但如果该字符串存储在变量a中(即$a扩展为字符串),您可以这样做:

b=${a#/} # Remove possible leading /
c=${b%/} # Remove possible trailing /

将所需的字符串放在变量c中。如果您的输入字符串包含问题中所写的单引号,则此方法无效,但我怀疑您并不打算表明此类引号位于字符串中。

答案 1 :(得分:1)

使用sed,您可以:

echo "a/b/c/" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"

示例:

$ echo "/a/b/c/" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"
a/b/c
$ echo "a/b/c/" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"
a/b/c
$ echo "/a/b/c" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"
a/b/c
$ echo "a/b/c" | sed "s#^/\(.*\)#\1#" | sed "s#\(.*\)/\$#\1#"
a/b/c

答案 2 :(得分:0)

这是一种技巧,但它只会输出一个/ b / c,只要它在输入中存在。

echo '/a/b/c/' | grep --only-matching 'a/b/c'

答案 3 :(得分:0)

$ echo "/a/b/c" | sed 's/^\///;s/\/$//'