shell 中find 和 grep

find 是找符合某个条件的文件

find命令原理:从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件,并可以对其进行相关的操作。

格式:find [查找目录] [参数] [匹配模型]  

多参数格式:find [查找目录] [参数] [匹配模型] [参数] [匹配模型]  

例如:

1、find . -name "*.sh"           

    查找在当前目录(及子目录)下找以sh结尾的文件

 

2、find . -perm 755               

    查找在当前目录(及子目录)下找属性为755的文件

 

3、find -user root                  

    查找在当前目录(及子目录)下找属主为root的文件

 

4、find /var -mtime -5           

     查找在/var下找更改时间5天以内的文件

 

5、find /var -mtime +3          

     查找在/var下找更改时间3天以前的文件

  

6、find /etc -type l                

     查找在/etc下查找文件类型为|的链接文件

 

7、find . -size +1000000c    

      查找在当前目录(及子目录)下查找文件大小大于1M的文件,1M是1000000个字节。

 

8、find . -perm 700 |xargs chmod 777         

      查找出当前目录(及子目录)下所有权限为700的文件,并把其权限重设为777。

 

9、find . -type f |xargs ls -l                         

      查找出文件并查看其详细信息。

 

grep 是对文件内容中某行查找,找到符合条件的某一行

grep

【背景】
grep的全称是global regular expression print,是linux中最强大的文本搜索命令之一,常用于搜索文本文件中是否含有某些特定模式的字符串。该命令以行为单位读取文本并使用正则表达式进行匹配,匹配成功后打印出该行文本。
【命令格式】
grep [option] "string_to_find" filename
常见选项:
(1)-i:忽略搜索字符串的大小写
(2)-v:取反,即输出不匹配的那些文本行
(3)-n:输出行号
(4)-l:输出能够匹配模式的文件名,相反的选项为-L
(5)-q:静默输出
选项是可选的,根据实际需求进行选择即可
string_to_find为需要匹配的模式,可以填写字符串或者正则表达式
filename为需要查找的文件的名称
【常见用法】
1.统计文件中能够匹配的行数
涉及选项:
(1)-c:计算匹配成功的行数
例子:
(1)输出text.txt中含有hello字符串的行的数量:

grep -c "hello" text.txt

2.统计文件中匹配的数量
涉及选项:
(1)-o:只输出匹配到的文本部分
例子:
(1)输出text.txt中含有hello的数量:

grep -o "hello" text.txt | wc -l
注意这个例子和上个的区别,-c选项在遇到一行中多次匹配正则表达式的情况时只是认为这一行匹配成功,而不会计算匹配成功的次数
3.递归搜索
涉及选项:
(1)-r:grep的参数filename为目录时可以加上本选项表示递归搜索
例子:
(1)从test_dir开始递归查找含有hello的行:
grep -r "hello" test_dir
这个选项很适用于在工程中搜索某些特定字符串
4.匹配多个正则表达式
涉及选项:
(1)-e:该选项加上正则表达式就是一个需要匹配的模式
例子:
(1)找出匹配hello或者world的行:

grep -e "hello" -e "world" test.txt

5.指定/排除文件
涉及选项:
(1)--include:指定需要搜索的文件
(2)--exclude:排除需要搜索的文件
(3)--exclude-dir:排除需要搜索的目录
例子:
(1)搜索src目录中.c和.cpp文件中的含有main的行:

grep -r "main" ./src --include *.{c,cpp}
(2)搜索src目录中含有main的行,但不搜索readme文件:

grep -r "main" ./src --exclude "readme"
(3)搜索src目录中含有main的行,但不搜索.git文件夹:

grep -r "main" ./src --exclude-dir ".git"

6.零值字节
涉及选项:
(1)-Z:设定输出的文本之间以'\0'作为分隔符
例子:
(1)删除含有hello字符串的文件:
grep -r "hello" ./src -lZ | xargs -0 rm -f
注意如果不使用-Z选项,则输出的文件名之间以空格符分隔。那么如果有个文件的文件名本身就是包含空格的,则该文件会被认为是两个文件,就可能造成误删
posted @ 2020-03-30 10:49  lililili——  阅读(823)  评论(0)    收藏  举报