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

标签 string bash shell unix 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

注意:我已经独立测试了上面的 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; 
   .
   .
   .

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

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

最佳答案

问题在于您使用:

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

关于string - 如何测试 HTML 文件中是否存在字符串 - Unix 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28722602/

相关文章:

R将大字符串转换为数据帧

android - 将 set<String> 数据类型转换为 android 中的 String 数据类型

c - 字符段错误

linux - 如何在 linux 中删除名为 "?"的文件?

java - 基于行起始符分割文本文件

linux - shell 脚本上的不明确重定向

regex - 使用awk按顺序匹配文件中的模式列表

linux - 我如何使用管道或重定向在 Linux 中按照我想要的顺序将文件附加到另一个文件?

linux - bash陷阱和过程替换

bash - 从子 shell 设置父 shell 的变量