grep 命令
grep 命令用于在文件中执行关键词搜索,并显示匹配的效果。格式为 “grep [选项] [文件]”。其实 grep 可以这样来记忆: g 表示 global,re 表示 regular expression,p 表示 print. 。

参数    作用
-b    将可执行文件当文本文件来搜索
-c    仅显示找到的行数
-i    忽略大小写
-n    显示行号
-v    反向选择 – 仅列出没有关键词的行。v 是 invert 的缩写。
-r    递归搜索文件目录
上述选项只列出了我常用的命令,想了解更多命令。可以使用 man grep 查找。

使用
在 helloWorld 中搜索一个单词,命令会返回一个包含 hello 的文本行。

grep hello helloWorld.txt



在多个文件中搜索

grep hello helloWorld.txt  helloWorld.txt2  helloWorld.txt3



在多个文件搜索的时候,可以使用通配符。在以 hello 开头的文件中,搜索包含 hello 的行。

[apple@VM_0_8_centos ~]$ grep hello  hello*
hello:hello
hello.groovy:println "hello world"
helloWorld:hello World



递归搜索目录下所有文件, 搜索 apple 目录下所有文件,打印出包含 hello 的行。

 grep hello -r apple/ 



反向查找,查找文件中,不包含 hello 的行。

grep -v hello helloWorld.txt



找出文件中包含 hello 的行,并打印出行号

grep  -n hello  helloWorld



使用正则表达式,找出 l 出现两次,并且后边为 o 的行, 正则表达式是 l{2}o ,因为 {} 是特殊符号,因此使用反斜杠 \ 转义,同时我发现,要想使用正则表达式,得加上单引号。

grep 'l\{2\}o' helloWorld 



获取 tomcat 进程 id

ps aux | grep ^`whoami` | grep tomcat |grep -v grep| awk '{print $2}'



如果对这个命令不太理解,可将命令分割为多个命令,在命令行上依次敲以下命令:

whoami
ps aux 
ps aux | grep ^`whoami`
ps aux | grep ^`whoami` | grep tomcat  // 这里要确保你运行了 tomcat , 没有 tomcat ,运行其他的进程也可以,记得替换 tomat
ps aux | grep ^`whoami` | grep tomcat |grep -v grep
ps aux | grep ^`whoami` | grep tomcat |grep -v grep| awk '{print $2}'



| :管道符,将前一个命令的输出作为下一个命令的输入

ps aux :查看系统进程状态
grep ^`whoami` : whoami 显示当前用户名,反引号 `` 首先执行, ^ : 正则表达式开头, 其实就是获取 ps aux 第一列中用户名是当前用户的行
grep tomcat : 获取包含 tomcat 的行
grep -v grep : 不要包含 grep 的行
awk ‘{print $2}’:获取第二列