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



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

/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/},但我如何将其应用于该系列?

您可以使用//来替换所有出现的子字符串。将其替换为空字符串以删除它们。

$ path="/home/me/src/test /home/me/src/vendor/a /home/me/src/vendor/b"
$ echo ${path///home/me/src/}
test vendor/a vendor/b

参考:Bash参考手册中的${parameter/patters/string}

使用shell参数扩展似乎不是解决这个问题的方法,因为它可以删除给定点之前/之后的所有内容是有用的,正如nu11p01n73R的答案所揭示的那样。

为了清楚起见,我将使用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

就像我这边的grep解决方案一样:

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

请注意,上面的正则表达式对任何像/x/y/z/test ..这样的字符串都是这样做的。但如果您只对更换/home/me/src/感兴趣,请尝试以下操作:

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

相关内容

  • 没有找到相关文章

最新更新