如何使用文件动态指定模式并根据该目录中的模式获取文件?

时间:2014-11-26 10:03:45

标签: regex linux bash shell

我是shell脚本的新手。如果我错了,请纠正。

我有一个名为ignorefileslist的文件,其中包含文件的名称和模式,如/ trunk / *表示忽略来自trunk的所有文件。

我能够获取保存此模式的文件行,但无法找到如何执行这些模式以获取与该模式匹配的文件。例如/ trunk / * pattern中的/ trunk文件夹中的文件。

ignorefileslist.txt:

/.settings
/.project
/branches/staging/test.php
/trunk/index.php
/trunk/*.php
/trunk/*

这是我的代码:

if grep -q "*" "$HOME/$REPONAME/ignorablefileslist.txt";then

   filewithpattern=`cat $HOME/$REPONAME/ignorablefileslist.txt | grep "*" `

   echo "It contains pattern $filewithpattern"    
fi

输出:

It contains pattern /trunk/*.php /trunk/*

我怎样才能将/ trunk / *和/trunk/*.php正则表达式相应地获取文件?

2 个答案:

答案 0 :(得分:0)

更改您的grep命令,如下所示,打印包含/trunk/*/trunk/*.php字符串的文件名。

grep -lP '/trunk/\*(\.php)?' *.*

答案 1 :(得分:0)

如果由于某种原因你需要保持条件语句的完整性,那么你可以使用循环和进程替换来避免子shell。

if grep -q "*" ignorefileslist.txt; then while read filewithpattern; do echo "It contains pattern $filewithpattern"; done < <( grep "*" ignorefileslist.txt ); fi