如何测试 HTML 文件中是否存在字符串 - Unix 脚本

How to test if a string exists in a HTML file - Unix Script

我正在编写一个 ksh 脚本。我在一个目录中有一对 html 文件,我需要检查这些文件是否包含两个字符串之一(这些字符串是互斥的)。然后我根据文件包含的两个字符串中的哪一个重命名文件。

测试时,我可以在 .txt 文件上使用以下代码,但在测试 .html 文件中的字符串时,该功能不再有效:

outageString='Scheduled Outage List'
jobString='Scheduled Job List'

for file in `ls -1t $fileNameFormat | head -n 2`
do
    if grep -xq "$outageString" "$file"; then
        mv "$file" "$outageFileName"
    elif grep -xq "$jobString" "$file"; then
        mv "$file" "$jobFileName"
    fi
done

注意: 我已经独立测试了上面的 ls 命令,它 returns 相应的文件。

文件内容:

<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>
 OUS: Scheduled Outage List
 </title>
 </head>
 <body>
 <h3>
 OUS: Scheduled Outage List
 </h3>
 &nbsp; 
   .
   .
   .

问: 有没有人知道为什么 grep 在两个文件中搜索字符串时没有返回适当的值(即,为什么 grep无法识别文件中存在该字符串)?

类似问题:How to test if string exists in file with Bash shell?

试试这个:

  for file in $(grep -H "Scheduled Outage List" /path/to/files/*.html | cut -d: -f1);
do
        echo $file;
        # mv files around
 done

问题在于您使用:

grep -x

因为带有 -xgrep 命令尝试匹配精确的整行。根据 man grep:

-x, --line-regexp
    Only input lines selected against an entire fixed string or regular expression are 
    considered to be matching lines.

只需使用 grep -Fq 而不是 grep -xq

PS: 不建议像这样使用 ls 的输出。最好直接在 for 循环中使用 globbing,如下所示:

for file in *.html; do
    echo "processing $file"
done

grep 中的 -x 选项匹配作为整行的精确正则表达式匹配,因此因为 HTML 文档中的行开始 "OUS:" 它不会匹配。

我只能猜测 .txt 文件没有这个。