通过grep源码,分析grep返回值

本文探讨了grep命令的返回值及其错误处理。通过对grep源码的分析,发现grep返回值有三种情况:0表示匹配,1表示不匹配,2表示出现错误。错误信息通常被输出到标准错误中,而通过使用-s选项可以屏蔽这些错误显示。同时,文章还揭示了grep如何处理'-'作为标准输入,并提到了grep中使用的DFA正则引擎。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

在群里跟朋友讨论grep的出错,提到grep返回码与返回的错误信息问题

想要确认grep的返回值是多少,如何区分各种错误,反回特意去gnu网站下载的grep源码进行分析

 

 

grep源码分析结果:
1:grep返回值有三个,0匹配,1:不匹配,2:出错
2:错误信息(包括解析后的错误代码)输出到标准错误中
3:通过设置-s,可以屏蔽错误显示

 

ps:二个发现
1:源码里有个dfa.c和dfa.h, 应该是grep里有到的正则引擎,正则引擎分DFA和NFA二种,DFA快,但没NFA的d环视,回朔等功能
2:源码里,解析"-"为标准输入。之前讨论过关于"-"参数为标准输入的问题,现在可以确认grep对-参数,是程序解析,而非shell解析


具体源码分析如下:
main函数退出语句
  exit (errseen ? 2 : status);

errseen说明:
其中errseen在函数里设置,并通过error输出到标准输出
suppressible_error (char const *mesg, int errnum)
{
  if (! suppress_errors)
    error (0, errnum, "%s", mesg);
  errseen = 1;
}
suppressible_error 被调了四次,
包括buf,file,dir等几种错误,
在没有suppress,即屏蔽错误信息前提下,通过error函数,将错误输出到标准错误
error函数在第二个参数不为0的时候,调用perror解析错误代码,比如(这里用的是系统命令)
[root@localhost sc]# perror 5
+ perror 5
OS error code   5:  Input/output error


sta

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值