免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3589 | 回复: 5
打印 上一主题 下一主题

grep和egrep在CentOS之间的关系问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-10 00:53 |只看该作者 |倒序浏览
本帖最后由 rigeldeneb 于 2011-11-10 00:55 编辑

1、都知道egrep是相当于grep -E这个命令的。
2、因此我想当然的认为egrep是后者的alias,但是当使用type命令查看的时候发现:“egrep is hashed (/bin/egrep)”并不是想象的那样
3、于是我查看/bin/egrep的属性:“/bin/egrep -> grep”是个符号链接文件,链接的是grep!
4、问题出现了,系统是如何将两者的使用方法区别的:因为经实验egrep确实等同于grep -E而不是grep

ps:我使用的是centos5.6

对两者进行--version得到的版本号
egrep (GNU grep) 2.5.1
grep (GNU grep) 2.5.1

望释疑,谢谢。

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-06-01 06:20:00数据库技术版块每日发帖之星
日期:2016-06-11 06:20:00操作系统版块每日发帖之星
日期:2016-06-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-13 06:20:00数据库技术版块每日发帖之星
日期:2016-08-07 06:20:00
2 [报告]
发表于 2011-11-10 08:23 |只看该作者
egrep使用的是扩展正则表达式,
grep使用的是标准正则表达式,
就这么简单!

至于什么是扩展正则表达式,goooooooooooooooooogle,一大堆,你不知道啊?!

论坛徽章:
0
3 [报告]
发表于 2011-11-10 09:58 |只看该作者
本帖最后由 阿辉 于 2011-11-10 10:01 编辑
1、都知道egrep是相当于grep -E这个命令的。
2、因此我想当然的认为egrep是后者的alias,但是当使用type命 ...
rigeldeneb 发表于 2011-11-10 00:53



    你的理解没错,是同一个东西。

但是grep本身对主程序参数做了判断,如果是egrep就按grep -E跑,fgrep就按grep -f跑。

看下面的测试:

  1. [root@db ~]# egrep 'o+' test.txt
  2. rot:x:0:0:/rot:/bin/bash
  3. operator:x:11:0:operator:/root:/sbin/nologin
  4. operator:x:11:0:operator:/rooot:/sbin/nologin
  5. roooot:x:0:0:/rooooot:/bin/bash

  6. [root@db ~]# grep 'o+' test.txt  

  7. [root@db ~]# cp /bin/grep egrep

  8. [root@db ~]# ./egrep 'o+' test.txt
  9. rot:x:0:0:/rot:/bin/bash
  10. operator:x:11:0:operator:/root:/sbin/nologin
  11. operator:x:11:0:operator:/rooot:/sbin/nologin
  12. roooot:x:0:0:/rooooot:/bin/bash
复制代码

论坛徽章:
0
4 [报告]
发表于 2011-11-14 02:17 |只看该作者
回复 3# 阿辉


    通过测试似乎真的如你所说,thx

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
5 [报告]
发表于 2011-11-14 08:11 |只看该作者
程序会判断下标为0的参数的值(就是调用本文件的路径). busybox也是根据argv0来决定使用对应的命令的.

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2011-11-28 13:11 |只看该作者
回复 1# rigeldeneb

拟真..

$ ls -l egrep.sh
lrwxrwxrwx 1 jason jason 7 Nov 28 13:06 egrep.sh -> grep.sh

$ cat grep.sh

eflag=0
case $0 in
  *egrep.sh)
    eflag=1
    ;;
esac
for arg in "$@"; do
case $arg in
   -E) eflag=1
   ;;
  --version)
    echo "$0 test version 0.0.1"
    exit
   ;;
  esac
done
echo "eflag=$eflag"


$ ./grep.sh
eflag=0

$ ./grep.sh --version
./grep.sh test version 0.0.1

$ ./egrep.sh
eflag=1

$ ./egrep.sh --version
./egrep.sh test version 0.0.1

$ ./grep.sh -E
eflag=1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP