linux – grep是不一致的默认为grep -P?

前端之家收集整理的这篇文章主要介绍了linux – grep是不一致的默认为grep -P?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个脚本,它做一些内务处理,从交互式 shell调用效果很好,但在被cron调用时什么也没做.为了解决这个问题,我使用以下命令启动了一个带有“空白”环境的shell:
env -i /bin/bash --noprofile --norc

使用这个空白环境我已经挖到我的脚本,发现以下grep将不匹配任何文件

grep -il "^ws_status\s*=\s*[\"']remove[\"']$"

但是,从交互式shell运行时,该命令将返回匹配文件文件名.

作为注释,表达式匹配如下行:WS_STATUS =“remove”

通过反复试验,我发现在选项[Perl regex]中添加-P命令在’blank’shell中正常启动.但是,我不知道为什么我的登录shell似乎默认为grep -P.

>只有一个grep二进制文件/ bin / grep
>没有为grep = pgrep或grep =“grep -P”定义的别名
>没有定义env变量GREP_OPTIONS.

这是什么交易?

注意:操作系统是RHEL v5.10,Bash是v3.2.25,grep是v2.5.1

解决方法

这些变量中的任何一个都是?

GREP_OPTIONS,LC_ALL,LC_COLLATE,LANG,LC_CTYPE,LC_MESSAGES或POSIXLY_CORRECT

其中任何一个都可能影响grep的行为.

您可以尝试的一件事是“set -x”来查看运行的各个命令.您也可以将命令移动到shell脚本中并从cron中调用它.这样,您可以更轻松地更轻松地添加set,env和set -x等命令.

#!/bin/bash
echo SET
set
echo ENV
env
set -x
grep -il "^ws_status\s*=\s*[\"']remove[\"']$"
exit

猜你在找的Linux相关文章