Heya伙计们,我有这个小脚本,我需要grep所有文件,只留下包含关键字的文件,我坚持这一点,任何帮助指出我的愚蠢错误,赞赏:)
#!/bin/bash
server=(server1...server24)
.
.
.
for ((n=0; n <= 24 ; n++))
do
if grep -q "KEYWORD" directory/${server[$n]}.html ; then
echo Empty
else
rm -f directory/${server[$n]}.html
fi
done
.
.
.
答案 0 :(得分:2)
如果您让代码通过以下方式之一为您执行此操作,则无需确保计数匹配:
servers=(foo bar baz)
for server in ${servers[@]}
do
if ! grep -qs "KEYWORD" directory/$server.html
then
rm ...
或
servers=(foo bar baz)
for ((n = 0; n < ${#servers[@]}; n++))
do
if ! grep -qs "KEYWORD" directory/${servers[$n]}.html
then
rm ...
使用!
反转条件,使其“如果文件不包含关键字,则将其删除”。
使用grep
选项-q
清除输出,-s
抑制错误信息。
答案 1 :(得分:1)
您可以使用-l
选项进行grep
grep -l "KEYWORD" directory/server*html | while read -r FOUND
do
rm -f .....
do some other processing here.....
done
答案 2 :(得分:1)
确保以下内容:
分隔中的服务器名称 数组按空格为:
server=(server1 server2 server3 ... server24)
有效索引从0
到23
(比阵列数少一个
元件)。
所以你的for循环应该
是:
for ((n=0; n <= 23 ; n++))
要么
for ((n=0; n < 24 ; n++))
答案 3 :(得分:0)
我建议您为每个文件执行grep,然后测试退出状态$?
- 并修复大括号扩展。
所以......
for ((n=0; n <= 24 ; n++))
do
grep -q "KEYWORD" directory/server${n}.html
if [ $? -eq 0 ] then
echo "directory/server${n}.html - Has keyword"
else
rm -f directory/server${n}.html
fi
done
答案 4 :(得分:0)
#!/usr/bin/env bash
server=(server{1..24})
for((n=0; n<24; n++))
do
if grep -q 'keyword' ${server[$n]}; then
echo Empty
else
rm -f ${server[$n]}
fi
done