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>
.
.
.
Run Code Online (Sandbox Code Playgroud)
问:有没有人知道为什么grep在搜索两个文件中的字符串时没有返回适当的值(即,为什么grep不识别文件中存在字符串)?
您使用的问题是:
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)