Bash脚本:变量中的文件夹列表和grep确切的目录名称

时间:2011-08-08 12:10:48

标签: bash directory grep

这是我的问题。获取GC.xml文件所在的目录列表:

  

EXBRANDS=找到/ var / www / html / -maxdepth 3 -name“GC.xml”-type f | awk -F'/''{print $ 5}';

#echo $EXBRANDS

#dir1 dir2 dir3 (it appears exactly like this)

#read var

输入“dir”例如

这就是我无法识别我输入的确切模式以将其与我的目录列表进行比较的地方。

echo $EXBRANDS | grep "[ $var]\|[$var ]\|[ $var]" if [[ $? -eq 0 ]] ; then ..... else ..... fi;

我认为我的grep命令存在问题,好像我将值“dir”传递给$ var我的grep命令实际找到目录并返回$?= 0

我希望只有在我的grep命令中找到$ var的模式时才能获得$?= 0 ...

这里最好的grep(egrep)选项是什么?或者我的方法完全是愚蠢的?

2 个答案:

答案 0 :(得分:2)

您的EXBRANDS包含许多行,并且您使用echo松开这些行。

我会那样做:

read var
find /var/www/html/ -maxdepth 3 -name "GC.xml" -type f | awk -F '/' '{print $5}' | grep "^$var\$"
if [[ $? -eq 0 ]] ; then ...  else ... fi;

确保grep与"^$var\$"构造的确切线匹配。

修改:您也可以printf "$EXBRANDS" | grep "^$var\$"代替回声,它可能会解决您的问题。

答案 1 :(得分:1)

尝试使用字边界:

if [ ! -z "$var" ] ;  
    then echo $EXBRANDS | grep -e "\b$var\b"; 
    if [[ $? -eq 0 ]] ; 
        then echo "Y"; 
        else echo "N"; 
    fi;
    else echo "input dir must be not null"; 
fi;

编辑:添加空检查