1. 程式人生 > >shell腳本--在帶本月日期的文件中搜索包含某個關鍵字,並返回含有關鍵字的文件

shell腳本--在帶本月日期的文件中搜索包含某個關鍵字,並返回含有關鍵字的文件

保存 沒有 現在 code 語句 block 當前目錄 lac 判斷語句

因為工作中每天都需要根據某個關鍵字,在包含每天日期的一批文件中搜索某個關鍵字,找出這批文件中包含關鍵字的文件,並返回文件名。
本程序涉及:find命令,date命令,if循環,$符號的意義(本程序涉及在bash腳本和命令行中意義)

腳本名為h.sh,
腳本運行:
例如:我們想搜索jack在不在本月的黑名單中,就這樣執行腳本:sh h.sh jack,

# cat h.sh

1 #!/bin/sh
2 sdate=`date +%Y%m`
3 dir=`find ./  -name "BLACKLIST_${sdate}*"`
4 for i in $dir
5 do

6       if grep $1 $i ;
7             then echo $i
8       else

9           echo $i  ‘>>>>  no found‘
10      fi
11done

第2行:
顯示當前日期所在年月,比如現在日期20190422,該句得到的是201904

第3行:

用find語句查找當前目錄(如果不放在文件所在的目錄要將程序中第3行的./更改為你目標文件所在目錄),所有文件名以BLACKLIST_201904開頭的文件,比如現在是201904,
則完整find語句是:find ./ -name "BLACKLIST_201904*"  ,${sdate}就是201904,即一個變量值的替換
並將這些文件名放在dir變量中

5~11行:
最外層是一個循環,循環中嵌套一個if判斷語句。

第6行:
if語句是逐個判斷dir中保存的文件中是否有我們作為第一個參數送進來的。$1就是jack,當然也可以傳入多個值$2,$3……,這裏就要更改if語句了。

$i就是目前正在搜索的文件。比如當前日期是20190422,我們的文件是.txt後綴結尾的,那麽$i就有可能是
BLACKLIST_20190401.txt、BLACKLIST_20190402.txt、……BLACKLIST_20190422.txt這22個文件中的任何一個。
如果jack在,就只顯示文件名,如果不在就打印提示:在文件中XXX中沒有發現

shell腳本--在帶本月日期的文件中搜索包含某個關鍵字,並返回含有關鍵字的文件