删除空格分隔路径的路径前缀

时间:2016-06-08 08:44:52

标签: linux bash shell

给出由单个空格分隔的路径列表:

/home/me/src/test /home/me/src/vendor/a /home/me/src/vendor/b 

我想删除前缀/home/me/src/,以便结果为:

test vendor/a vendor/b

对于我会做的单一路径:${PATH#/home/me/src/}但是如何将其应用于此系列?

3 个答案:

答案 0 :(得分:4)

您可以使用except: sys.exit(0) 替换所有出现的子字符串。将其替换为空字符串以将其删除。

//

参考:${parameter/pattern/string} in Bash reference manual

答案 1 :(得分:2)

使用shell parameter expansion 似乎不是解决此问题的方法,因为它会删除某个特定点以外的所有内容非常有用,正如nu11p01n73R's answer所揭示的那样。

为清楚起见,我会使用sed语法sed 's#pattern#replacement#g'

$ str="/home/me/src/test /home/me/src/vendor/a /home/me/src/vendor/b"
$ sed 's#/home/me/src/##g' <<< "$str"
test vendor/a vendor/b

答案 2 :(得分:0)

总是像我这边的一个grep解决方案:

echo 'your string' | grep -Po '^/([^ /]*/)+\K.+'

请注意,上述正则表达式适用于/x/y/z/test ..之类的任何字符串。但是,如果您只对替换/home/me/src/感兴趣,请尝试以下操作:

echo 'your string' | grep -Po '^/home/me/src/\K.+' --color