MyException - 我的异常网
当前位置:我的异常网» 操作系统 » 文本搜寻必学命令-grep egrep fgrep用法以及正则表

文本搜寻必学命令-grep egrep fgrep用法以及正则表达式

www.MyException.Cn  网友分享于:2014-03-14  浏览:0次
文本搜索必学命令-grep egrep fgrep用法以及正则表达式
文本搜索必学命令-grep egrep fgrep用法以及正则表达式
2013-03-06 17:48:01
标签:linux grep egrep 正则表达式
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chrinux.blog.51cto.com/6466723/1148613
一、grep、egrep、fgrep命令
  本文中主要介绍了linux系统下grep egrep fgrep命令和正则表达式的基本参数和使用格式、方法。(注释:文中fg代表例子,)
1.1、基本定义:
        grep(global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来。
    grep是很常见也很常用的命令,它的主要功能是进行字符串数据的比较,然后符合用户需求的字符串打印出来,但是主意,grep在数据中查找一个字符串时,是以“整行”为单位进行数据筛选的。
    egrep命令等同于grep -E,利用此命令可以使用扩展的正则表达式对文本进行搜索,并把符合用户需求的字符串打印出来。
    fgrep命令等同于grep -F,它利用固定的字符串来对文本进行搜索,但不支持正则表达式的引用,所以此命令的执行速度也最快。
1.2、命令基本用法
     grep [option] '搜索字符串' filename
     grep常用选项:
-a :在二进制文件中,以文本文件的方式搜索数据
fg:在/etc/inittab内搜索包含rc字符串的行
     grep -a 'rc' /etc/inittab
-c :计算找到'搜索字符串'的次数
-i :忽略大小写
-v :反向查找,即显示没有'搜索字符串'内容的那行
-o :只显示被模式匹配的字符串
-n :输出行号
--colour(color):颜色显示
-A:显示匹配到字符那行的后面n行
-B:显示匹配到字符那行的前面n行
-C:显示匹配到字符那行的前后n行
二、正则表达式
2.1、基本定义:
     正则表达使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。简而言之,正则表达式就是处理字符串的方法,以行为单位进行字符串的处理,通过一些特殊符号的辅助,可以让用户轻松搜索/替换某特定的字符串。
     正则表达式分为两类:基本的正则表达式和扩展的正则表达式。
2.2、正则表达式详细介绍
  2.2.1、基本的正则表达式:
      (1)元字符:
. :匹配任意单个字符
  fg:查找包含student且student后面带一个字符的行
  grep ‘student.’ /etc/passwd //模式可以用单引号和双引号,如果模式中要做变量替换时则
  必须用双引
[]:匹配指定范围内的任意单个字符,[abc],[a-z],[0-9],[a-zA-Z]
   fg:查找带有数字的行
   grep ‘[0-9]’ /etc/passwd
[^]:匹配指定范围外的任意单个字符
  fg:查找没有小写字母的行。
  grep ‘[^a-z]’ /etc/inittab
[:space:]:表示空白字符
[:punct:]:表示所有标点符号的集合
[:lower:]:表示所有的小写字母
[:upper:]:表示所有的大写字母
[:alpha:]:表示大小写字母
[:digit:]:表示数子
[:alnum:]:表示数字和大小写字母-----使用格式[[:alnum:]]等
    (2)次数匹配:
*  :匹配其前面的字符任意次
    fg:查找root出现0次或0次以上的行
    grep ‘root*’ /etc/passwd
.* :任意字符 
   fg:查找包含root的行
   grep 'root.*' /etc/passwd
\?:匹配其前面的字符1次或0次
\{m,n\} :匹配其前字符最少m,最多n次)
     (3) 字符锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
  fg:查找行首以#开头的行
  grep '^#' /etc/inittab
$:锚定行尾,此字符前面的任意内容必须出现在行尾
  fg:查找行首以root结尾的行
  grep 'root$' /etc/inittab  
^$:锚定空白行,可以统计空白行
\<或者\b:锚定词首,其后面的任意字符必须做为单词首部出现
  fg:查找root且root前面不包含任何字符的行
  grep '\<root' /etc/man.config
\>或者\b:锚定词尾,其前面的任意字符必须做为单词尾部出现                                 
fg:\<root\> 查找root单词  grep "\<root\>" =grep "\broot\b"
2.2.2、扩展的正则表达式:
     扩展的正则表达只是在基本的正则表达上作出了小小的一点修改,其修改如下:
     在扩展的正则表达中把\( \) 写成()、\{ \} 写成{ },另外加入了+:次数匹配,匹配其前面的字符至少出现一次,无上限、|: 或者(二取一),其余的都一样, 基本正则表达式,使用( ) { } . ? |都需要转义,在扩展正则表达中不需要加\,其详细信息如下:
         (1) 字符匹配的命令和用法与基本正则表达式的用法相同,这里不再重复阐述。
         (2) 次数匹配:
* :匹配其前面字符的任意次
?:匹配其前面字符的0此或着1此
+ :匹配其前面字符至少1此
   fg:至少一个空白符: '[[:space:]]+'
{m,n} :匹配其前面字符m到n次
          (3) 字符锚定的用法和基本正则表达式的用法相同,在此不再阐述。
         (4)特殊字符:
| : 代表或者的意思。
   fg:grep -E 'c|cat' file:表示在文件file内查找包含c或者cat
\.:\表示转义字符,此表示符号.
三、grep命令利用小实例
(1)显示/etc/inittab 中以#开头,且后面跟一个或者多个空白符,而后又跟了任意非空白符的行
grep '#[[:space:]]*[^[:space:]]' /etc/inittab

(2) 输出不是数字开头的行
grep  '^[0-9]’  /etc/passwd

(3)输出行首是1或2
  grep '^\(1\|2\)' /etc/inittab或grep -E '^(1|2)' /etc/inittab
   
(4)查找前面是rc中间接任意字符而后跟/rc
  grep '.*\(rc\).*\/\1.*' /etc/inittab
 
(5)取出当前电脑上的IP
  ifconfig |grep -A 1 "^eth0" |grep "\<[0-9.]\{1,\} |cut -d: -f2
 
(6)查找当前系统上名字为student(必须出现在行首)的用户账户的相关信息,文件为/etc/passwd
   grep "^student" /etc/passwd
(7)显示/proc/meminfo文件中以不区分大小写的s开头的行
grep -i '^s' /proc/meminfo或者 grep  '^[sS]' meminfo
(8) 显示/etc/inittab 中以#开头,且后面跟一个或者多个空白符,而后又跟了任意非空白符的行
  grep '^#[[:space:]]*[^[:space:]]' /etc/inittab
(9) 显示/boot/grub/grub.conf文件中以一个或者多个空白符开头的行
grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf
(10)显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行
grep '^\([0-9]\).*\1$' /etc/inittab   或者 grep '^\([[:digit:]]\).*\1$' /etc/inittab
(11)找出ifconfig命令结果中的1-255之间的整数  
ifconfig | egrep '\b[0-9][0-9]\b?|\b1[0-9][0-9]\b|\b2[0-4][0-9]\b|\b25[0-5]\b' --color




本文出自 “Chris On the way” 博客,请务必保留此出处http://chrinux.blog.51cto.com/6466723/1148613

文章评论

看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
鲜为人知的编程真相
鲜为人知的编程真相
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员和编码员之间的区别
程序员和编码员之间的区别
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员都该阅读的书
程序员都该阅读的书
编程语言是女人
编程语言是女人
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
我的丈夫是个程序员
我的丈夫是个程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
一个程序员的时间管理
一个程序员的时间管理
每天工作4小时的程序员
每天工作4小时的程序员
如何成为一名黑客
如何成为一名黑客
旅行,写作,编程
旅行,写作,编程
我是如何打败拖延症的
我是如何打败拖延症的
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
总结2014中国互联网十大段子
总结2014中国互联网十大段子
那些争议最大的编程观点
那些争议最大的编程观点
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员应该关注的一些事儿
程序员应该关注的一些事儿
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
代码女神横空出世
代码女神横空出世
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
中美印日四国程序员比较
中美印日四国程序员比较
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
10个调试和排错的小建议
10个调试和排错的小建议
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有