1

我有一条这样的路径..

/Users/me/bla/dev/trunk/source/java/com/mecorp/sub/misc/filename.java

我希望能够使用 bash 在另一个目录中创建包结构,例如

com/mecorp/sub/misc/

我尝试了以下但它不会工作..如果我将我的正则表达式更改为 .* 我能够得到一个匹配,这意味着我的 bash 是好的 - 我引用正则表达式或正则表达式的方式一定有问题自己。我确实看到在这里工作..

http://regexr.com?3439m

所以我很困惑?

regex="(?<=/java)(.*)(?=/)"


 [[ $fullfile =~ $regex ]]
 echo "pkg name " ${BASH_REMATCH[0]}

谢谢你的时间。

编辑 - 我使用的是 OSX,所以它没有那些漂亮的 GNU 扩展。

4

2 回答 2

2

试试这个 :

使用GNU

$ echo '/Users/me/bla/dev/trunk/source/java/com/mecorp/sub/misc/filename.java' | 
    grep -oP 'java/\K.*/'
com/mecorp/sub/misc/

http://regexr.com?3439p

或使用

x="/Users/me/bla/dev/trunk/source/java/com/mecorp/sub/misc/filename.java"
[[ $x =~ java/(.*/) ]] && echo ${BASH_REMATCH[1]}

或使用

echo "$x" | awk -F/ '{print gensub(".*/java/(.*/).*", "\\1", $0)}'

或使用

echo "$x" | sed -e 's@.*/java/\(.*/\).*@\1@'
于 2013-03-12T00:52:19.743 回答
0

如果您尝试提取路径后/java/可以这样做:

path=/Users/me/bla/dev/trunk/source/java/com/mecorp/sub/misc/filename.java
package=`echo $path | sed -r 's,^.*/java/(.*/).*$,\1,'`
于 2013-03-12T00:54:00.677 回答