我是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正则表达式相应地获取文件?
答案 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