标签:echo 当前日期 find .sh txt 打印 脚本 ack 嵌套
因为工作中每天都需要根据某个关键字,在包含每天日期的一批文件中搜索某个关键字,找出这批文件中包含关键字的文件,并返回文件名。
本程序涉及: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脚本--在带本月日期的文件中搜索包含某个关键字,并返回含有关键字的文件
标签:echo 当前日期 find .sh txt 打印 脚本 ack 嵌套
原文地址:https://blog.51cto.com/12280599/2382483