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 に答える