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

Mar*_*Koz 2 unix string bash shell command-line

我正在写一个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
Run Code Online (Sandbox Code Playgroud)

注意:我已经ls独立测试了上面的命令,并返回了相应的文件.

文件内容:

<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; 
   .
   .
   .
Run Code Online (Sandbox Code Playgroud)

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

类似问题:如何使用Bash shell测试文件中是否存在字符串?

anu*_*ava 5

您使用的问题是:

grep -x
Run Code Online (Sandbox Code Playgroud)

由于grep命令-x试图匹配精确的满行.按照man grep:

-x, --line-regexp
    Only input lines selected against an entire fixed string or regular expression are 
    considered to be matching lines.
Run Code Online (Sandbox Code Playgroud)

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

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

for file in *.html; do
    echo "processing $file"
done
Run Code Online (Sandbox Code Playgroud)