如果grep失败,请删除该文件

时间:2010-10-06 07:47:55

标签: bash scripting shell grep

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

.
.
.

5 个答案:

答案 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)

  • 有效索引从023 (比阵列数少一个 元件)。
    所以你的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