一、简介 

   Lgrep命令是inux系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。

    grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

    grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

    grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

  1.命令格式:

  grep [option] pattern file

  2.命令功能:

用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活.

二 、使用示范:

ps -ef|grep ftp   找指定进程

ps -ef|grep ftp -c   统计指定进程个数

cat test.txt | grep -f test2.txt    从文件读关键字进行搜索,显示匹配到的行

cat test.txt | grep -nf test2.txt          从文件读关键字进行搜索,显示匹配到的行,输出时显示行号

grep 'linux' test.txt           从文中查找关键字,显示匹配到的行

ps aux | grep ssh | grep -v "grep"   grep不显示本身进程

 

grep root /etc/passwd       将文件有出现 root 的行取出来
cat /etc/passwd | grep root     将文件有出现 root 的行取出来
grep -n root /etc/passwd     将文件有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号
grep -v root /etc/passwd     将/etc/passwd,将没有出现 root 的行取出来
grep -v root /etc/passwd | grep -v nologin grep -v root /etc/passwd | grep -v nologin
                 将/etc/passwd,将没有出现 root 和nologin的行取出来
dmesg | grep -n --color=auto 'eth'
                用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,要将捉到的关键字显色,且加上行号来表示:
dmesg | grep -n -A3 -B2 --color=auto 'eth'
                用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,在关键字所在行的前两行与后三行也一起捉出来显示

grep ‘energywise’ *       在当前目录搜索带'energywise'行的文件

grep -r ‘energywise’ *      在当前目录及其子目录下搜索'energywise'行的文件
grep -l -r ‘energywise’ *     在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件

grep -n 't[ae]st' regular_express.txt

                字符类的搜索:如果我想要搜寻 test 或 taste 这两个单字时,可以发现到,其实她们有共通的 't?st' 存在

grep -n '[^g]oo' regular_express.txt
                字符类的反向选择 [^] :如果想要搜索到有 oo 的行,但不想要 oo 前面有 g,

grep -n '[^a-z]oo' regular_express.txt
              字符类的连续:再来,假设我 oo 前面不想要有小写字节,所以,我可以这样写 [^abcd....z]oo , 但是这样似乎不怎么方便,由於小写字节的 ASCII 上编码的顺序是连续的
grep -n '^the' regular_express.txt
              行首字符:如果我想要让 the 只在行首列出呢? 这个时候就得要使用定位字节
grep -n '^[^a-zA-Z]' regular_express.txt
              不想要开头是英文字母,则可以是这样
              ^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义!
grep -n '\.$' regular_express.txt
              那如果我想要找出来,行尾结束为小数点 (.) 的那一行

grep -n '^$' regular_express.txt      找出空白行: 只有行首跟行尾 (^$),所以,这样就可以找出空白行
grep -n 'g..d' regular_express.txt .     (小数点):代表『一定有一个任意字节』的意思;
                      * (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态
grep -n 'ooo*' regular_express.txt         当我们需要『至少两个 o 以上的字串』时,就需要 ooo*
grep -n 'goo*g' regular_express.txt        要字串开头与结尾都是 g,但是两个 g 之间仅能存在至少一个 o
grep -n 'g.*g' regular_express.txt        要找出 g 开头与 g 结尾的行,当中的字符可有可无
grep -n '[0-9][0-9]*' regular_express.txt     要找出『任意数字』的行?仅有数字
grep -E 'NW|EA' testfile grep -E         或者 egrep,打印所有包含NW或EA的行。如果不是使用egrep,而是grep,将不会有结果查出
# egrep '3+' testfile
# grep -E '3+' testfile
# grep '3\+' testfile                搜索所有包含一个或多个3的行
grep -E '2\.?[0-9]' testfile            搜索所有包含0个或1个小数点字符的行
grep -E '(no)+' testfile              搜索一个或者多个连续的no的行