从文件路径中查找带图案的目录路径

时间:2016-08-25 14:27:28

标签: regex bash

我有以下文件路径:

/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/始终为'projects-FB'模式,后跟可变位数。

我尝试过使用dirnameecho expr match,但我无法使用正则表达式,并且dirname对于可变数量的子目录变得棘手。

2 个答案:

答案 0 :(得分: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