一、grep和find的区别
区别:
(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。
(2)find相当于linux下的搜索,用来搜索文件的;
grep则是用来搜索文本的,主要是用来查找文字内容的;
二、grep和ask和sed的区别
(1)单位不同:
grep:以行为单位处理文本;
awk::通过制定分隔符将一行或者一条记录分为多个字段,以字段为单位处理文本;
sed :实现数据以行为单位进行处理
(2)功能不同:
grep:属于单纯的正则表达式匹配,主要是在一个文件中查找过滤需要的东西
awk:awk的功能依赖于grep,属于一个文本处理工具,将一个文件处理成目标格式;
awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
sed::按照一次处理一行的方式处理文件并把输出送到屏幕上
(3)使用场景不同:
grep:
a、结合find命令和管道:
你的一个音乐文件夹里有多种格式的文件,而你只想找到艺术家jay的mp3文件,并且不含有任何的混合音轨
[root@localhost ~]#find . -name ".mp3" | grep -i jay | grep -vi "remix"
b、用-c来统计数目
你手头有一个很大的文件,这个文件包含网址,比如www.baidu.com tieba.baidu.com等等。你想要知道有多少个 隶属于百度的网址
c、-r 递归查找子目录
查找当前目录极其子目录下面包含匹配字符的文件
查找子目录,匹配后输出行号,这里的点表示当前目录
[root@localhost ~]# grep -nr HELLO_HWC_CSND_BLOG*
d、--line-buffered 打开buffering 模式
你有一个文件是动态的,它不断地添加信息到文件的尾部,而你想要输出包含某些信息的行。即持续的grep一个 动态的流
e、结合ps查看进程
f、查找不包含某一个目录
[root@localhost ~]#grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
g、查找IP地址
这里用到了-o和-P命令,我们通过man grep查看
h、查找邮箱
[root@localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt
awk:
a、统计apache日志单ip访问请求数排名;
b、统计服务器当前单ip连接数最大的ip地址前十
sed:
a、太过庞大的文本
b、有规律的文本修改