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

Bash 如果grep失败,请删除该文件,bash,scripting,shell,grep,Bash,Scripting,Shell,Grep,嘿,伙计们,我有一个小脚本,我需要对所有文件进行grep处理,只留下那些包含关键字的文件,我被困在这一点上,任何帮助指出我愚蠢的错误都是非常感谢的: #!/bin/bash server=(server1...server24) . . . for ((n=0; n <= 24 ; n++)) do if grep -q "KEYWORD" directory/${server[$n]}.html ; then echo Empty

嘿,伙计们,我有一个小脚本,我需要对所有文件进行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

.
.
.
您可以对grep使用-l选项

grep -l "KEYWORD" directory/server*html | while read -r FOUND
do
   rm -f .....
   do some other processing here.....
done
确保:

在列表中分隔服务器名称 按空格排列为:

服务器=服务器1服务器2服务器3。。。服务器24

有效索引的范围为0到23 比数组的数量少一个 元素。所以你的for循环应该 是:


对于n=0;n我建议您对每个文件执行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

如果您让代码通过以下方式之一为您执行操作,则不必确保计数匹配:

servers=(foo bar baz)
for server in ${servers[@]}
do
    if ! grep -qs "KEYWORD" directory/$server.html 
    then
        rm ...

使用!若要反转条件,使其在文件不包含关键字的情况下生效,请将其删除


使用grep选项-q使输出静音,使用-s抑制错误消息。

实际上我需要这行代码,因为我的每台服务器都有不同的主机名,我只是在这里输入server1-24以简化代码。为了清楚起见,我在这里输入server1-24以简化代码,实际上我的24台服务器都有不同的主机名,这就是我需要服务器阵列的原因。你的回音为空有点让人困惑。你知道如果你找到关键字你会得到的,对吗?是的,那只是一个愚蠢而快速的方法来确保if语句工作,如果它找到关键字,它不会对文件做任何事情,因为在这种情况下,我想保留文件,我只想删除那些没有keyword.grep-l keyword directory/*.html | xargs-r rm-f-l not-l的文件(对于没有matchDang的文件):这是最好的答案,只要你合并@pixelbeat的两个注释。并且,根据OP的要求,将directory/server*html更改为$server。当然,可以使用xargs。但我不会改变我的答案。因为我假设还需要做一些其他的处理。这就是为什么它只是一个建议,它有助于可读性。。大括号展开修复了错误。
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 ...