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中没有发现

原文地址:https://blog.51cto.com/12280599/2382483

时间: 2024-11-05 13:44:19

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

shell脚本:批量修改文件名(删除文件名中字符)

shell脚本:批量修改文件名(文件名中添加字符) 上一篇写过批量修改文件名(文件名中添加字符),工作中还存在这样的需求,批量修改文件名,删除文件名中的某些字符: 举例如下:批量改名,删除文件名中多余字符 目录下文件名为如下,要求去掉_finished. stu_102999_1_finished.jpg stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg stu_102999_5_finis

linux查找特定类型的文件中是否包含特定字段

shell是个好东西,极大的方便了查询工作,之前遇到一个问题,查询包含有特定字段的特定文件,经过查询,命令如下: 1 find . -type f -name '*.cpp' print|xargs grep -r '#include' -l 上述命令的意思是查询包含有 '#include' 字符的 cpp文件,并给出文件名列表.具体需要熟悉find 和grep命令和各个参数的意思. 参考链接:http://blog.sina.com.cn/s/blog_691a84f301015khx.htm

Java读写文件,在文件中搜索内容,并输出含有该内容的所有行

1.问题描述 在一个目录及子目录下查找 TXT或Java文件,从中搜索所有"对象"字样的行. 在D盘中的所有文件中搜索含有"对象"的行. 2.解题思路 先找出D盘下所有文件 再对每个文件中的每行内容进行,进行查找,若含有"对象"两字,输出该行. 3.程序代码 import java.io.File; import java.io.IOException; import java.util.Scanner; public class B { sta

用grep在文件中搜索文本

搜索包含特定模式的文本行: grep "pattern" filename 也可以像下面从stdin中读取: echo -e "This is a word. \n next line ." |grep word 单个grep命令也可以对多个文件进行搜索: grep "match_text" file1 file2 file3 ... 用--color选项可以在输出行中着重标记匹配到的单词: grep word filename --color=

在某个目录下的所有文件中查找包含某个字符串的Windows命令

findstr可以完成这个工作. findstr /s /i "string" *.*   上面的命令表示,当前目录以及当前目录的所有子目录下的所有文件中查找"string"这个字符串. *.*表示所有类型的文件. /s 表示当前目录以及所有子目录 /i 表示不区分大小写 可以参考help findstr的输出解释来使用此命令. 注意: findstr.exe一般在C:\Windows\System32目录下,要从任意路径调用该命令,需要将C:\Windows\Sy

python文件中的__name__=='__main__'的使用及调用其他py文件中的函数方法

最近学习python的时候经常会看到好多py文件中都有if _name_ == '_main_': 这句话,所以就花点儿时间来研究一下,总结了一下使用方法及原则. 平时我们使用python IDE编写py程序的时候 一般是很少用到if name == 'main':这句话的,因为我们在运行py文件时,没有牵扯到其他目录下自定义的py文件,所以不用写这句话就可以无忧地执行当前py文件中的函数,但 想想 如果要是需要调用其他的py文件中的自定义函数呢?这就需要使用if name == 'main':

第十六章 在文件中搜索文本工具:grep命令 和egrep命令

第十六章 在文件中搜索文本工具:grep命令 和egrep命令 名词解释 grep(global search regular expression(RE)and print out the line,全面搜索正则表达式并把行打印出来) grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. 选项 - -a :不要忽略二进制数据 - -A <显示行数>:除了显示符合范本样式的那一行之外,并显示该行之后的内容. - -b :在显示符合范本样式的那一行之外,并显示该行

ubuntu 用shell脚本实现将当前目录下所有目录中的某一类文件拷贝到同一目录下

当前目录下有一些文件和目录,其中每个目录里都有若干.txt文件, 现在要求在当前目录创建一个新目录all,且将那些目录所有.txt文件 都拷贝到目录all.在ubuntu12.04的shell脚本实现如下: #!/bin/sh # 提示信息 echo "start:" # 定义变量 dst=all pst=.txt # 复制文件到目标文件夹 if [ -d ${dst} ] then echo "${dst} existed" else echo "mkd

perl 遍历指定目录下的所有文件,替换指定文本内容,返回受影响的文件路径

不会读取 影藏文件 main #!/usr/bin/perl my ($path, $rp) = @ARGV; sub search_file{ my ($fname, $rp) = @_; # 获取操作文件名 和 查询的正则 my ($o) = split("/", $rp); open(of, "<$fname") or die "$fname 文件打开失败!$!"; while(<of>){ chomp; if($_ =~