linux命令---grep命令
简介
  grep (global search regular expression(RE) and print out the line,全⾯搜索正则表达式并把⾏打印出来)是⼀种强⼤的⽂本搜索⼯具,它能使⽤正则表达式搜索⽂本,并把匹配的⾏打印出来。
  Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很⼩不同。egrep是grep的扩展,⽀持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表⽰回其⾃⾝的字⾯意义,不再特殊。linux使⽤GNU版本的grep。它功能更强,可以通过-G、-E、-F命令⾏选项来使⽤egrep和fgrep的功能。
  grep的⼯作⽅式是这样的,它在⼀个或多个⽂件中搜索字符串模板。如果模板包括空格,则必须被引⽤,模板后的所有字符串被看作⽂件名。搜索的结果被送到标准输出,不影响原⽂件内容。grep可⽤于shell脚本,因为grep通过返回⼀个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的⽂件不存在,则返回2。我们利⽤这些返回值就可进⾏⼀些⾃动化的⽂本处理⼯作。
命令格式:grep [option] pattern file
grep的常⽤选项:
-V:打印grep的版本号
-E:解释PATTERN作为扩展正则表达式,也就相当于使⽤egrep。或操作
-F :  解释PATTERN作为固定字符串的列表,由换⾏符分隔,其中任何⼀个都要匹配。也就相当于使⽤fgrep。
-G:  将范本样式视为普通的表⽰法来使⽤。这是默认值。加不加都是使⽤grep。
匹配控制选项:
-e :  使⽤PATTERN作为模式。这可以⽤于指定多个搜索模式,或保护以连字符( - )开头的图案。指定字符串做为查⽂件内容的样式。
-f :  指定规则⽂件,其内容含有⼀个或多个规则样式,让grep查符合规则条件的⽂件内容,格式为每⾏⼀个规则样式。
-
i :  搜索时候忽略⼤⼩写
-v:  反转匹配,选择没有被匹配到的内容。
-w:匹配整词,精确地单词,单词的两边必须是⾮字符符号(即不能是字母数字或下划线)
-x:仅选择与整⾏完全匹配的匹配项。精确匹配整⾏内容(包括⾏⾸⾏尾那些看不到的空格内容都要完全匹配)
-y:此参数的效果和指定“-i”参数相同。
⼀般输出控制选项:
-c:抑制正常输出;⽽是为每个输⼊⽂件打印匹配线的计数。
--color [= WHEN]:让关键字⾼亮显⽰,如--color=auto
-L:列出⽂件内容不符合指定的范本样式的⽂件名称
-l : 列出⽂件内容符合指定的范本样式的⽂件名称。
-m num:当匹配内容的⾏数达到num⾏后,grep停⽌搜索,并输出停⽌前搜索到的匹配内容
-o: 只输出匹配的具体字符串,匹配⾏中其他内容不会输出
-q:安静模式,不会有任何输出内容,查到匹配内容会返回0,未查到匹配内容就返回⾮0
-s:不会输出查过程中出现的任何错误消息,-q和-s选项因为与其他系统的grep有兼容问题,shell脚本应该避免使⽤-q和-s,并且应该将标准和错误输出重定向到/dev/null 代替。
输出线前缀控制:
-b:输出每⼀个匹配⾏(或匹配的字符串)时在其前附加上偏移量(从⽂件第⼀个字符到该匹配内容之间的字节数)
-H:在每⼀个匹配⾏之前加上⽂件名⼀起输出(针对于查单个⽂件),当查多个⽂件时默认就会输出⽂件名
-h:禁⽌输出上的⽂件名的前缀。⽆论查⼏个⽂件都不会在匹配内容前输出⽂件名
--label = LABEL:显⽰实际来⾃标准输⼊的输⼊作为来⾃⽂件LABEL的输⼊。这是特别在实现zgrep等⼯具时⾮常有⽤,例如gzip - | grep --label = foo -H的东西。看到也是-H选项。
-n:输出匹配内容的同时输出其所在⾏号。
-T:初始标签确保实际⾏内容的第⼀个字符位于制表位上,以便对齐标签看起来很正常。在匹配信息和其前的附加信息之间加⼊tab以使格式整齐。
上下⽂线控制选项:
-A num:匹配到搜索到的⾏以及该⾏下⾯的num⾏
-B num:匹配到搜索到的⾏以及该⾏上⾯的num⾏
-C num:匹配到搜索到的⾏以及上下各num⾏
⽂件和⽬录选择选项:
-a:处理⼆进制⽂件,就像它是⽂本;这相当于--binary-files = text选项。不忽略⼆进制的数据。
--binary-files = TYPE:如果⽂件的前⼏个字节指⽰⽂件包含⼆进制数据,则假定该⽂件为类型TYPE。默认情况下,TYPE是⼆进制的,grep通常输出⼀⾏消息⼆进制⽂件匹配,或者如果没有匹配则没有消息。如果TYPE不匹配,grep假定⼆进制⽂件不匹配;这相当于-I选项。如果TYPE是⽂本,则grep处理a⼆进制⽂件,如果它是⽂本;这相当于-a选项。警告:grep --binary-files = text可能会输出⼆进制的垃圾,如果输出是⼀个终端和如果可能有讨厌的副作⽤终端驱动程序将其中的⼀些解释为命令。
-D:如果输⼊⽂件是设备,FIFO或套接字,请使⽤ACTION处理。默认情况下,读取ACTION,这意味着设备被读取,就像它们是普通⽂件⼀样。如果跳过ACTION,设备为默默地跳过。
-d:  如果输⼊⽂件是⽬录,请使⽤ACTION处理它。默认情况下,ACTION是读的,这意味着⽬录被读取,就像它们是普通⽂件⼀样。如果跳过ACTION,⽬录将静默跳过。如果ACTION是recurse,grep将递归读取每个⽬录下的所有⽂件;这是相当于-r选项。
--exclude=GLOB:跳过基本名称与GLOB匹配的⽂件(使⽤通配符匹配)。⽂件名glob可以使⽤*,?和[...]作为通配符,和\引⽤通配符或反斜杠字符。搜索其⽂件名和GLOB通配符相匹配的⽂件的内容来查匹配使⽤⽅法:grep -H --exclude=c* "old" ./*  c*是通配⽂件名的通配符./* 指定需要先通配⽂件名的⽂件的范围,必须要给*,不然就匹配不出内容,(如果不给*,带上-r选项也可以匹配)
--exclude-from = FILE:在⽂件中编写通配⽅案,grep将不会到匹配⽅案中⽂件名的⽂件去查匹配内容
--exclude-dir = DIR:匹配⼀个⽬录下的很多内容同时还要让⼀些⼦⽬录不接受匹配,就使⽤此选项。
--include = GLOB:仅搜索其基本名称与GLOB匹配的⽂件(使⽤--exclude下所述的通配符匹配)。
-R ,-r :以递归⽅式读取每个⽬录下的所有⽂件; 这相当于-d recurse选项。
其他选项:
--line-buffered:在输出上使⽤⾏缓冲。这可能会导致性能损失。
--mmap:启⽤mmap系统调⽤代替read系统调⽤
-U:将⽂件视为⼆进制。
-z:将输⼊视为⼀组⾏,每⼀⾏由⼀个零字节(ASCII NUL字符)⽽不是a终⽌新队。与-Z或--null选项⼀样,此选项可以与排序-z等命令⼀起使⽤来处理任意⽂件名。
简述
-a  --text  #不要忽略⼆进制的数据。将 binary ⽂件以 text ⽂件的⽅式搜寻数据
-A<;显⽰⾏数>  --after-context=<;显⽰⾏数>  #除了显⽰符合范本样式的那⼀列之外,并显⽰该⾏之后的内容。
-b  --byte-offset  #在显⽰符合样式的那⼀⾏之前,标⽰出该⾏第⼀个字符的编号。
-B<;显⽰⾏数>  --before-context=<;显⽰⾏数>  #除了显⽰符合样式的那⼀⾏之外,并显⽰该⾏之前的内容。
-c    --count  #计算符合样式的⾏数。
-C<;显⽰⾏数>    --context=<;显⽰⾏数>或-<;显⽰⾏数>  #除了显⽰符合样式的那⼀⾏之外,并显⽰该⾏之前后的内容。
-d <;动作>      --directories=<;动作>  #当指定要查的是⽬录⽽⾮⽂件时,必须使⽤这项参数,否则grep指令将回报信息并停⽌动作。
-e<;范本样式>  --regexp=<;范本样式>  #指定字符串做为查⽂件内容的样式。
-E      --extended-regexp  #将样式为延伸的普通表⽰法来使⽤。
-f<;规则⽂件>  --file=<;规则⽂件>  #指定规则⽂件,其内容含有⼀个或多个规则样式,让grep查符合规则条件的⽂件内容,格式为每⾏⼀个规则样式。-F  --fixed-regexp  #将样式视为固定字符串的列表。
-G  --basic-regexp  #将样式视为普通的表⽰法来使⽤。
-h  --no-filename  #在显⽰符合样式的那⼀⾏之前,不标⽰该⾏所属的⽂件名称。
-H  --with-filename  #在显⽰符合样式的那⼀⾏之前,表⽰该⾏所属的⽂件名称。
-i    --ignore-case  #忽略字符⼤⼩写的差别。
-l    --file-with-matches  #列出⽂件内容符合指定的样式的⽂件名称。
-L  --files-without-match  #列出⽂件内容不符合指定的样式的⽂件名称。
-n  --line-number  #在显⽰符合样式的那⼀⾏之前,标⽰出该⾏的列数编号。
-q  --quiet或--silent  #不显⽰任何信息。
-r  --recursive  #此参数的效果和指定“-d recurse”参数相同。
-s  --no-messages  #不显⽰错误信息。
-v  --revert-match  #显⽰不包含匹配⽂本的所有⾏。
-
V  --version  #显⽰版本信息。
-w  --word-regexp  #只显⽰全字符合的列。
-x    --line-regexp  #只显⽰全列符合的列。
-y  #此参数的效果和指定“-i”参数相同。
--color=auto :可以将到的关键词部分加上颜⾊的显⽰
使⽤实例:
⼀、常⽤⽤法
grep -i pattern files :不区分⼤⼩写地搜索。默认情况区分⼤⼩写,
grep -l pattern files :只列出匹配的⽂件名,
grep -L pattern files :列出不匹配的⽂件名,
grep -w pattern files :只匹配整个单词,⽽不是字符串的⼀部分(如匹配‘magic’,⽽不是‘magical’),
grep -C number pattern files :匹配的上下⽂分别显⽰[number]⾏,
grep pattern1 | pattern2 files :显⽰匹配 pattern1 或 pattern2 的⾏,
grep pattern1 files | grep pattern2 :显⽰既匹配 pattern1 ⼜匹配 pattern2 的⾏。
grep命令查看进程这⾥还有些⽤于搜索的特殊符号:
< 和 > 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep \'<man\' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep \'<man>\' 只匹配‘man’,⽽不是‘Batman’或‘manic’等其他的字符串。
\'^\':指匹配的字符串在⾏⾸,
\'$\':指匹配的字符串在⾏尾,
如果您不习惯命令⾏参数,可以试试图形界⾯的‘grep’,如 reXgrep 。这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 :-) 。如果您只是需要更清楚的输出,不妨试试 fungrep 。
.grep 搜索字符串
命令格式:
grep string filename
寻字串的⽅法很多,⽐如说我想所有以M开头的⾏.此时必须引进pattern的观
念.以下是⼀些简单的□例,以及说明:
^M 以M开头的⾏,^表⽰开始的意思
M$ 以M结尾的⾏,$表⽰结束的意思
^[0-9] 以数字开始的⾏,[]内可列举字母
^[124ab] 以1,2,4,a,或b开头的⾏
^b.503 句点表⽰任⼀字母
* 星号表⽰0个以上的字母(可以没有)
+ 加号表⽰1个以上的字母
. 斜线可以去掉特殊意义
<eg> cat passwd | grep ^b 列出⼤学部有申请帐号者名单
cat passwd | grep ^s 列出交换学⽣申请帐号者名单
cat passwd | grep \'^b.503\' 列出电机系各年级...
grep \'^.\' 列出所有以句点开头的⾏
1、查指定进程
命令:ps -ef|grep java
2、查指定进程个数
命令:ps -ef|grep -c java
或ps -ef|grep java -c
3、从⽂件中读取关键词进⾏搜索,默认是显⽰的是⾏
命令1: | grep -
命令2(显⽰⾏号): | grep -
作⽤:输出⽂件中含有从⽂件中读取出的关键词的内容⾏,可⽤于按指定关键词(放到⼀个⽂件中)搜索⽇志⽂件。
另⼀种⽤法:将多个⽂件之间相同的⾏输出来
# cd /etc/sysconfig/network-scripts/
# grep  "IPADDR" ifcfg-eth0  ifcfg-lo      #默认不加参数指定过滤关键字,外加多个⽂件,只是将多个⽂件⾥⾯有匹配的⾏输出
ifcfg-eth0:IPADDR=192.168.1.108
ifcfg-lo:IPADDR=127.0.0.1
# grep -f ifcfg-eth0  ifcfg-lo  #grep -f ⽂件1 ⽂件2 ,会将多个⽂件之间相同的⾏输出出来
ONBOOT=yes
-o:只显⽰被模式匹配到的字符串,⽽不是整个⾏
命令:grep -o "you" ab.log
# grep "root"  /etc/passwd  #先看下正常的过滤,会将整个⼀⾏过滤出来
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# grep -o "root" /etc/passwd  #加o之后的操作,只过滤关键字出来
root
root
root
root
# grep -o "root:.*0" /etc/passwd    #加上正则表达式,这样才是正确的⽤法,不⽤输出⼀整⾏,只是输出⼀⼩段
root:x:0:0
# grep -o "root" -b  /etc/passwd
-b和-o⼀般是配合使⽤的,⼀⾏中字符串的字符是从该⾏的第⼀个字符开始计算,起始值为0。这⾥左边的数字就是此关键字在此⽂件中的起始位置,第⼀个root出现在0位置,然后字符字母有⼀个算⼀个,你就⼀个个的向右数吧,下⼀个root出现在11位置以此类推。
0:root
11:root
17:root
414:root
4、从⽂件中查关键词,忽略⼤⼩写,默认情况区分⼤⼩写
命令1:grep 'linux'
命令2(从多个⽂件中查):grep 'linux'
  多⽂件时,输出查询到的信息内容⾏时,会把⽂件的命名在⾏最前⾯输出并且加上":"作为标⽰符
命令3(忽略⼤⼩写):grep -i  'linux'

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。