如何测试 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>
.
.
.
问: 有没有人知道为什么 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
因为带有 -x
的 grep
命令尝试匹配精确的整行。根据 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 文件没有这个。
我正在编写一个 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>
.
.
.
问: 有没有人知道为什么 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
因为带有 -x
的 grep
命令尝试匹配精确的整行。根据 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 文件没有这个。