需要使用grep在文件中查找字符串

时间:2014-07-07 07:29:28

标签: regex linux bash shell grep

我使用shell脚本使用wget获取文件并搜索模式。我的shell脚本如下:

#Execute commands one by one
while read line
do
        STARTTIME=$(($(date +%s%N)/1000000))
        line2=$(wget -q --post-data "$line" -O PHPFiles/test.php http://localhost:1234/XSS/XSS2/test.php)
        ENDTIME=$(($(date +%s%N)/1000000))
        GAP=$(($ENDTIME-$STARTTIME))
        DIFF=$(($DIFF+($ENDTIME-$STARTTIME)))
        echo "Time Taken "$GAP

        finalSearchLine1="${line/&name2=/ }"
        finalSearchLine2="${finalSearchLine1/name=/}"

        echo "$finalSearchLine2"

        if grep -q -F "$finalSeachLine2" -a PHPFiles/test.php;
        then
                echo found
                success=$((success+1))
        else
                echo not found
                failure=$((failure+1))
        fi
        rm PHPFiles/test.php
done < $1
echo "***************"
echo "Success "$success
echo "Failure "$failure
echo "Total Time "$DIFF
echo "Average Time "$((DIFF/(success+failure)))

但是,我遇到了grep命令的问题。有时,数据$finalSearchLine2包含引号,例如:

<script >alert("XSS"); </script>

这似乎会导致grep命令出现问题。对于if语句,即使found变量中没有匹配的模式,我似乎总是将结果设为$finalSearchLine2。我不知道是否可以在grep变量中使用转义字符串。任何人都可以建议一个可能的解决方案吗?

1 个答案:

答案 0 :(得分:0)

Grep需要双引号才能像\"一样进行转义 因此,作为第一个解决方案,您可以尝试:

temp_variable=$(sed 's/"/\\"/g' <<< $temp)
if  grep -q -F "$temp_variable" -a /PHPFiles/test.php;

所以你先用sed转义双引号,然后将结果存储在temp_variable中。然后在grep中使用temp_variable。