一、简介
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的行