grep 常规用法小结
2014-03-10 19:04
197 查看
概述:
grep 最初是一个基于unix操作系统的命令行工具。在给出文件列表或标准输入后,grep会匹配一个或多个正则表达式的文本搜索,并输出匹配(或者不匹配)的行或文本。grep全称global search regular expression(RE) and print out the line即全面搜索正则表达式并把行打印出来。unix的grep家族包括grep,egrep和fgrep。
功能描述:
这个命令搜索整个文件中匹配给定正则表达式的文本行,并显示出来。有很多不同的命令行用于改变grep的默认行为,包括显示出不匹配的文本行、查找或排除搜索的文件以及用不同的方式在输出中进行注释。同时也有很多经典Unix下grep的现代版本,这些版本都有着独特的功能。
如:grep apple fruitlist.txt 则表示返回fruitlist.txt所有包含“apple”的行,但是不会返回含“Apple”的行
因为grep对大小写敏感。像大多数Unix命令行一样,grep接受参数来改变或增加一些特别的功能。例如:grep -i apple
fruitlist.txt,这个命令会返回所有匹配“apple”、“Apple”、“apPLE”或其它混合大小写的拼写。在一些grep版本中,参数 -e 可以用于使用多个匹配样式来进行搜索。
总之就是查找输入文件每一行中匹配的字符串。
格式:
grep [-acinv] [--color=auto]
[-A n] [-B n] '搜寻字符串' 文件名 或者 grep [option]
基本参数:
-a:将二进制文档以文本方式处理
-c:显示匹配的次数
-i: 忽略大小写,默认情况下对大小写敏感的
-n:在行首显示行号
-A:After的意思,显示匹配字符串后n行的数据
-B:Before的意思,显示匹配字符串前n行的数据
-v:显示没有匹配行,有取反的意思,如:grep
-v “test” file.txt 就过滤掉包含test的行,又如:
find -type d |grep -vw "test" 过滤出test之外的子目录,反检索,显示不匹配的行
-color:以特定颜色高亮显示匹配的关键字
-n:匹配行前面的行号
-w:全词匹配,如:grep -w “money” file.txt 则过滤出包含money单词的行,而amoney则不
匹配
–color选项是个非常好的选项,可以让你清楚的明白匹配了那些字符。最好在自己的.bashrc或者.bash_profile文件中加入
alias grep=grep --color=auto
每次搜索完成之后,自动高亮匹配.
多余一次匹配多个字符串的可以使用命令grep -E "safe|nginx",
而awk方式为:awk '/123|abc/' filename
关于参数选项的更多用法可以,man grep 即可获得。
常规正则表达式
正则表达式是对字符串操作的逻辑表示,可以用来查找匹配文本。正则表达式由一般字符和特殊字符组成,特殊字符又称为元字符,常见的元字符有:
\: 忽略正则表达式中特殊字符的原有含义;
^:匹配正则表达式的开始行,指匹配的字符串在行首;
$: 匹配正则表达式的结束行,指匹配的字符串在行 尾;
\<:从匹配正则表达 式的行开始;
\>:到匹配正则表达式的行结束;
\>:到匹配正则表达式的行结束;
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 ;
. :所有的单个字符;
* :有字符,长度可以为0;
grep命令的简单实例
$ grep ‘test’ d*
显示所有以d开头的文件中包含 test的行。
$ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep ‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep ‘w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
$ grep b|B aa ==> $ grep [bB] aa
$ grep -r
明确要求搜索子目录
$ grep -d skip
忽略子目录
$ grep pattern1 | pattern2 files
显示匹配 pattern1 或 pattern2 的行
$ grep pattern1 files | grep pattern2
显示既匹配 pattern1 又匹配 pattern2 的行
\< 和 \> 分别标注单词的开始与结尾
例如:
grep man * 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
匹配出现root的行
$ grep 'root'
/etc/group
root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
匹配正则表达式的开始行
$ grep '^root' /etc/group
root::0:root
$ grep 'uucp' /etc/group
uucp::5:root,uucp
nuucp::9:root,nuucp
$ grep '\<uucp' /etc/group
uucp::5:root,uucp
匹配正则表达式的结束行
# grep 'root$' /etc/group
root::0:root
mail::6:root
使用类名
可以使用国际模式匹配的类名:
[[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:digit:]] [0-9]
[[:alnum:]] [0-9a-zA-Z]
[[:space:]] 空格或tab
[[:alpha:]] [a-zA-Z]
例如:
grep '5[[:upper:]][[:upper:]]' data.doc #查询以5开头以两个大写字母结尾的行
grep 最初是一个基于unix操作系统的命令行工具。在给出文件列表或标准输入后,grep会匹配一个或多个正则表达式的文本搜索,并输出匹配(或者不匹配)的行或文本。grep全称global search regular expression(RE) and print out the line即全面搜索正则表达式并把行打印出来。unix的grep家族包括grep,egrep和fgrep。
功能描述:
这个命令搜索整个文件中匹配给定正则表达式的文本行,并显示出来。有很多不同的命令行用于改变grep的默认行为,包括显示出不匹配的文本行、查找或排除搜索的文件以及用不同的方式在输出中进行注释。同时也有很多经典Unix下grep的现代版本,这些版本都有着独特的功能。
如:grep apple fruitlist.txt 则表示返回fruitlist.txt所有包含“apple”的行,但是不会返回含“Apple”的行
因为grep对大小写敏感。像大多数Unix命令行一样,grep接受参数来改变或增加一些特别的功能。例如:grep -i apple
fruitlist.txt,这个命令会返回所有匹配“apple”、“Apple”、“apPLE”或其它混合大小写的拼写。在一些grep版本中,参数 -e 可以用于使用多个匹配样式来进行搜索。
总之就是查找输入文件每一行中匹配的字符串。
格式:
grep [-acinv] [--color=auto]
[-A n] [-B n] '搜寻字符串' 文件名 或者 grep [option]
基本参数:
-a:将二进制文档以文本方式处理
-c:显示匹配的次数
-i: 忽略大小写,默认情况下对大小写敏感的
-n:在行首显示行号
-A:After的意思,显示匹配字符串后n行的数据
-B:Before的意思,显示匹配字符串前n行的数据
-v:显示没有匹配行,有取反的意思,如:grep
-v “test” file.txt 就过滤掉包含test的行,又如:
find -type d |grep -vw "test" 过滤出test之外的子目录,反检索,显示不匹配的行
-color:以特定颜色高亮显示匹配的关键字
-n:匹配行前面的行号
-w:全词匹配,如:grep -w “money” file.txt 则过滤出包含money单词的行,而amoney则不
匹配
–color选项是个非常好的选项,可以让你清楚的明白匹配了那些字符。最好在自己的.bashrc或者.bash_profile文件中加入
alias grep=grep --color=auto
每次搜索完成之后,自动高亮匹配.
多余一次匹配多个字符串的可以使用命令grep -E "safe|nginx",
而awk方式为:awk '/123|abc/' filename
关于参数选项的更多用法可以,man grep 即可获得。
常规正则表达式
正则表达式是对字符串操作的逻辑表示,可以用来查找匹配文本。正则表达式由一般字符和特殊字符组成,特殊字符又称为元字符,常见的元字符有:
\: 忽略正则表达式中特殊字符的原有含义;
^:匹配正则表达式的开始行,指匹配的字符串在行首;
$: 匹配正则表达式的结束行,指匹配的字符串在行 尾;
\<:从匹配正则表达 式的行开始;
\>:到匹配正则表达式的行结束;
\>:到匹配正则表达式的行结束;
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 ;
. :所有的单个字符;
* :有字符,长度可以为0;
grep命令的简单实例
$ grep ‘test’ d*
显示所有以d开头的文件中包含 test的行。
$ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep ‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep ‘w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
$ grep b|B aa ==> $ grep [bB] aa
$ grep -r
明确要求搜索子目录
$ grep -d skip
忽略子目录
$ grep pattern1 | pattern2 files
显示匹配 pattern1 或 pattern2 的行
$ grep pattern1 files | grep pattern2
显示既匹配 pattern1 又匹配 pattern2 的行
\< 和 \> 分别标注单词的开始与结尾
例如:
grep man * 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
匹配出现root的行
$ grep 'root'
/etc/group
root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
匹配正则表达式的开始行
$ grep '^root' /etc/group
root::0:root
$ grep 'uucp' /etc/group
uucp::5:root,uucp
nuucp::9:root,nuucp
$ grep '\<uucp' /etc/group
uucp::5:root,uucp
匹配正则表达式的结束行
# grep 'root$' /etc/group
root::0:root
mail::6:root
使用类名
可以使用国际模式匹配的类名:
[[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:digit:]] [0-9]
[[:alnum:]] [0-9a-zA-Z]
[[:space:]] 空格或tab
[[:alpha:]] [a-zA-Z]
例如:
grep '5[[:upper:]][[:upper:]]' data.doc #查询以5开头以两个大写字母结尾的行
相关文章推荐
- Grep用法小结
- grep用法小结
- Linux sed常规用法小结
- Grep用法小结
- Grep用法小结
- C语言宏的一些常规用法小结
- grep用法小结
- Grep用法小结
- grep sed awk常规用法
- typedef struct 用法详解和用法小结 及 在C和C++中的区别
- javascript this用法小结
- Spring mvc中@RequestMapping 6个基本用法小结
- SpringMVC(1)----@RequestParam和@PathVariable用法小结
- linux之grep用法
- Python基本输出函数print()用法小结
- Java String.split()用法小结
- C/C++基础知识:typedef用法小结
- awk用法小结
- urllib2用法小结
- grep命令的用法1