2016-08-25 191 views
0

我有這樣的文件路徑如下:查找圖案目錄路徑從文件路徑

/Users/admin/projects-FB9085/testing/tests/file/Library_Views_Mobile_Test.php 
/Users/admin/projects-FB9085/applications/Views/Library_Views_Mobile.php 

我想弄清楚,考慮到測試的文件路徑可以提取項目目錄像 bash命令/Users/admin/projects-FB9085/它總是模式'項目-FB',後面跟着可變的數字位數。

我試過使用dirnameecho expr match但我不能得到正則表達式工作,並且dirname與可變數量的子目錄變得棘手。

回答

2

從一個字符串:

$ grep -o '^.*projects-FB[0-9]\+' <<< '/Users/admin/projects-FB9085/testing/tests/file/Library_Views_Mobile_Test.php' 
/Users/admin/projects-FB9085 

$ echo '/Users/admin/projects-FB9085/testing/tests/file/Library_Views_Mobile_Test.php' | grep -o '^.*projects-FB[0-9]\+' 
/Users/admin/projects-FB9085 

,或者從文件

$ grep -o '^.*projects-FB[0-9]\+' infile.txt 

正則表達式如下你在問題中所描述

  • ^.*匹配任何數量從最初的文字
  • projects-FB是你的唯一字符串
  • [0-9]\+是一個或多個數字
  • grep -o將僅打印匹配部分
+1

工作得很漂亮。也感謝正則表達式的細分。 –

0

快速和骯髒的,但僅使用內建的:

while read DIR; do 
    DIR2="${dir#/Users/admin/projects-FB}"; 
    if [ "$DIR2" != "$DIR1" ]; then 
    echo "/Users/admin/projects-FB${DIR2%%/*}/"; 
    fi; 
done 

隨着sed

sed -n 's#^\(/Users/admin/projects-FB[0-9]\+\)/.*$#\1#p' 

並與expr,你要求:

while read DIR; do 
    expr "$DIR" : "\(/Users/admin/projects-FB[0-9]\+/\)"; 
done