作为程序员一定要保持良好的睡眠,才能好编程

linux 下查找 grep搜索命令使用说明

发布时间:2020-03-03

linux下很经常会使用到  搜索。


那么搜索文件名使用 find





grep 可以指定要搜索的文件,也可以指定一个目录 去搜索。

grep -rn "hello,world!" *
 
* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-l 只显示文件 但是不显示匹配的行,只显示匹配的文件
-R 查找所有文件包含子目录
-i 忽略大小写
-v 取反操作

--color=auto :可以将找到的关键词部分加上颜色的显示喔!在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊
!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 此时那个好用的 alias 就得来处理一下啦!
你可以在 ~/.bashrc 内加上这行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效即可喔! 
这样每次运行 grep 他都会自动帮你加上颜色显示啦

下面是一些有意思的命令行参数:


[root@localhost tt]# grep 'test' -n ./* --color=auto

例如这条命令,是查找当前目录下文件中 包含 test 的命令

grepautocolor.png


如何也能搜索文件中的内容?


grep 命令


grep  'test' -n  account.log  --color=auto  自动显示颜色



grep  -n  file


-n 显示行号:

[root@localhost ~]# grep -n 'nginx' /etc/passwd
32:nginx:x:496:493::/home/nginx:/sbin/nologin


只是在 /etc/passwd 中 找到了  nginx 的行 ,并显示是 32 行。



-v 输出 除了以 开头外所有行

cata.png


# 除了 tall 以外的所有行

grep -v 'tall' tell.sql





-v 取反

[root@localhost ~]# grep -nv 'nginx' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
11:operator:x:11:0:operator:/root:/sbin/nologin
12:games:x:12:100:games:/usr/games:/sbin/nologin
13:gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
14:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
15:nobody:x:99:99:Nobody:/:/sbin/nologin
16:dbus:x:81:81:System message bus:/:/sbin/nologin
17:usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
18:vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
19:rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
20:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
21:pulse:x:498:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
22:haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
23:ntp:x:38:38::/etc/ntp:/sbin/nologin
24:apache:x:48:48:Apache:/var/www:/sbin/nologin
25:saslauth:x:497:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
26:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
27:abrt:x:173:173::/etc/abrt:/sbin/nologin
28:gdm:x:42:42::/var/lib/gdm:/sbin/nologin
29:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
30:tcpdump:x:72:72::/:/sbin/nologin
31:song:x:500:500:song:/home/song:/bin/bash
33:ldap:x:55:55:LDAP User:/var/lib/ldap:/sbin/nologin
34:mysql:x:501:501::/home/mysql:/bin/false

仔细看,就是没有32行,-v就是取反的意思  把不是这个值的全部返回。


-w 只是匹配整个单词 而不是字符串的一部分。 如匹配 php  而不是phpinfo 



-r 加上这个参数,可以扫描此目录下的子目录,如果没有添加这个选项,则只是扫描当前文件夹下的文件。



[root@localhost local]# grep -r 8081 /usr/local/apache --color=auto
/usr/local/apache/confs/extra/httpd-vhosts.conf:Listen 8081
/usr/local/apache/confs/extra/httpd-vhosts.conf:<VirtualHost *:8081>
/usr/local/apache/confs/extra/httpd-vhosts.conf:    ServerName localhost:8081
/usr/local/apache/include/ap_mmn.h: * #if AP_MODULE_MAGIC_AT_LEAST(19980812,2)
/usr/local/apache/logs/dummy-error_log:[Thu Jul 26 15:03:14.965524 2018] [authz_core:error] [pid 27597] [client 172.28.66.198:61319] AH01630: client denied by server configuration: /usr/local/apache/www/test/favicon.ico, referer: http://172.28.66.194:8081/index.html
/usr/local/apache/logs/dummy-error_log:[Thu Jul 26 15:09:20.829660 2018] [authz_core:error] [pid 27640] [client 172.28.66.198:61648] AH01630: client denied by server configuration: /usr/local/apache/www/test/favicon.ico, referer: http://172.28.66.194:8081/index.html
/usr/local/apache/logs/dummy-error_log:[Thu Jul 26 15:09:21.392783 2018] [authz_core:error] [pid 27640] [client 172.28.66.198:61648] AH01630: client denied by server configuration: /usr/local/apache/www/test/favicon.ico, referer: http://172.28.66.194:8081/index.html
/usr/local/apache/logs/dummy-error_log:[Thu Jul 26 15:09:24.718813 2018] [authz_core:error] [pid 27639] [client 172.28.66.198:61657] AH01630: client denied by server configuration: /usr/local/apache/www/test/favicon.ico, referer: 



 
[root@localhost local]# grep -rw 8081 /usr/local/apache --color=auto


  #也可以


 

[root@localhost local]# grep -r -w 8081 /usr/local/apache --color=auto







-E 正则表达式匹配

使用正则表达式注意事项:需要使用双引号 包起来

[root@localhost ~]# grep -En 'Apach' /etc/passwd
24:apache:x:48:48:Apache:/var/www:/sbin/nologin

多个命令可以连用  -En   -E正则  -n 就是显示行号

 


查找出 b.txt 中所有 6-9开头 60-99分的。

[root@localhost ~]# grep -En '^[6-9][0-9]' b.txt



grep -E "^$" b.txt 匹配到空行



其他场景下的应用:

[root@localhost ~]# cat logs.txt
Script started on Thu 30 Aug 2018 06:02:18 PM CST
[root@localhost tt]# ct
bash: ct: command not found
[root@localhost tt]# cat test.sql
test
[root@localhost tt]# cat tall.sql
tall
[root@localhost tt]# cat tell.sql 
tell

tall

test
[root@localhost tt]# #这是三个文件
[root@localhost tt]# #下面我们来看看 grep 命令的使用方法,对文件内容进行查找
You have new mail in /var/spool/mail/root
[root@localhost tt]# # --color=auto 加上这个命令后 会把自动显示出颜色
[root@localhost tt]# #此命令使用最多的地方是 1、 项目中 文件内容查找 2、日志信息查找 
You have new mail in /var/spool/mail/root
[root@localhost tt]# grep 'test' -n ./* --color=auto
./tell.sql:5:test
./test.sql:1:test
[root@localhost tt]# # -n 显示行号 --color=auto 显示颜色  ./* 搜索当前目录下所有的文件
You have new mail in /var/spool/mail/root
[root@localhost tt]# grep 'test' -n test.sql --color=auto
1:test
[root@localhost tt]# grep 'test' -n tell.sql --color=auto
5:test
[root@localhost tt]# #这是搜索单个文件中的信息
[root@localhost tt]# 
[root@localhost tt]# 
[root@localhost tt]# cat tell.sql | grep 'test' -n
5:test
[root@localhost tt]# cat tell.sql | grep 'test' -n --color=auto
5:test
[root@localhost tt]# # cat 结合  grep 同样实现查找命令
[root@localhost tt]# 
You have new mail in /var/spool/mail/root
[root@localhost tt]# 
[root@localhost tt]# 
[root@localhost tt]# 
[root@localhost tt]# 
[root@localhost tt]# 
[root@localhost tt]# 
[root@localhost tt]# 
[root@localhost tt]# 
[root@localhost tt]# # -i 忽略大小写
[root@localhost tt]# 
[root@localhost tt]# vim tell.sql
[root@localhost tt]# grep 'test' -n tell.sql --color=auto
5:test
[root@localhost tt]# grep 'TEST' -n tell.sql --color=auto
9:TEST
You have new mail in /var/spool/mail/root
[root@localhost tt]# # 很是明显 不能查找到大写  或 小写  的test 字符串   -i 就是专门解决这个问题的。
[root@localhost tt]# 
[root@localhost tt]# grep 'TEST' -i -n tell.sql --color=auto
5:test
9:TEST
[root@localhost tt]# grep 'TEST' -i -c -n tell.sql --color=auto
2
You have new mail in /var/spool/mail/root
[root@localhost tt]# grep 'TEST' -i  -n tell.sql --color=auto
5:test
9:TEST
[root@localhost tt]# grep 'TEST' -i  -n tell.sql --color=auto
5:test
9:TEST
You have new mail in /var/spool/mail/root
[root@localhost tt]# 
[root@localhost tt]# 
[root@localhost tt]# exit
exit