![如何使用 shell 命令从目录中获取子字符串部分](https://linux22.com/image/717861/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20shell%20%E5%91%BD%E4%BB%A4%E4%BB%8E%E7%9B%AE%E5%BD%95%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%83%A8%E5%88%86.png)
我只需要使用 shell 命令从以下目录路径中提取最后 2 部分
“Android/2.1/软件包/测试/调试/”
预期输出:/test/debug
此路径是动态的,它会随着不同的路径值而变化,例如“Android / 2 / Pipeline / Packages / test / debug /”
我找不到可以提取最后两部分的特定正则表达式,即使其余路径值不断变化,即只能获取“/test/debug”
如果有人能帮忙的话,我将不胜感激
谢谢
答案1
我认为有很多方法,你可以尝试一下(用适合你的用例的方法替换 pwd):
echo /$(basename $(dirname $(pwd)))/$(basename $(pwd))
或者
pwd | awk -F/ '{print "/" $(NF-1) "/" $(NF)}'
或许还有无数其他的方法……
答案2
shell 可以使用变量修饰符、%
和间接执行此操作。这些修饰符会删除给定模式的尾随或前导匹配项。请注意,模式是 shell%%
#
##
全局,不是正则表达式。
下面的示例将打印最后两个路径元素,带或不带可选的尾随/
$ in="Android/2/Pipeline/Packages/test/debug/"
$ echo $( t=${in%/} && t=${t%/*/*} && echo ${in##$t} )
/test/debug/