加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 16:54:56 所属栏目:Linux 来源:网络整理
导读:我有一个脚本,它做一些内务处理,从交互式 shell调用时效果很好,但在被cron调用时什么也没做.为了解决这个问题,我使用以下命令启动了一个带有“空白”环境的shell: env -i /bin/bash --noprofile --norc 使用这个空白环境我已经挖到我的脚本,发现以下grep将
我有一个脚本,它做一些内务处理,从交互式 shell调用时效果很好,但在被cron调用时什么也没做.为了解决这个问题,我使用以下命令启动了一个带有“空白”环境的shell:
env -i /bin/bash --noprofile --norc

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

grep -il "^ws_statuss*=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_statuss*=s*["']remove["']$"
exit

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读