shell脚本--在带本月日期的文件中搜索包含某个关键字,并返回含有关键字的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本--在带本月日期的文件中搜索包含某个关键字,并返回含有关键字的文件相关的知识,希望对你有一定的参考价值。

因为工作中每天都需要根据某个关键字,在包含每天日期的一批文件中搜索某个关键字,找出这批文件中包含关键字的文件,并返回文件名。
本程序涉及: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脚本--在带本月日期的文件中搜索包含某个关键字,并返回含有关键字的文件的主要内容,如果未能解决你的问题,请参考以下文章

利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下

shell问题,如何按照想法创建多个以日期为名的文件夹??

shell备份移动某个目录下的文件

shell脚本中的$<是啥意思?谢谢!

AIX shell 脚本中的日期操作

shell脚本:通过在文件夹中的所有文件中搜索来查找字符串? [复制]