簡體   English   中英

如果grep失敗,請刪除該文件

[英]If grep fails delete the file

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

.
.
.

如果您讓代碼通過以下方式之一為您執行操作,則無需確保計數匹配:

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以禁止顯示錯誤消息。

你可以使用-l選項為grep

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

確保以下內容:

  • 用空格分隔數組中的服務器名稱:

    server=(server1 server2 server3 ... server24)

  • 有效索引從023 (比數組元素的數量少一個)。
    所以你的for循環應該是:

    for ((n=0; n <= 23 ; n++))for ((n=0; n < 24 ; 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
#!/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM