我有以下文件路径:
/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'模式,后跟可变位数。
我尝试过使用dirname
和echo expr match
,但我无法使用正则表达式,并且dirname对于可变数量的子目录变得棘手。
答案 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