当前位置: 首页 > 知识库问答 >
问题:

比较regex和grep输出-bash脚本

丁阳羽
2023-03-14

我试图使用grepgrep“^pass_max_days”/etc/login.defs在文件中查找单词“pass_max_days”,然后将其保存在一个变量中,并将其与值为90或更小的正则表达式进行比较。

regex=“pass_max_days\s*([0-9][1-8][0-9]90)”

grep输出为:pass_max_days120

function audit_Control () {

    if [[ $cmd =~ $regex ]]; then
        echo match
    else
        echo fail
    fi
}
cmd=`grep "^PASS_MAX_DAYS" /etc/login.defs`
regex="PASS_MAX_DAYS\s*([0-9]|[1-8][0-9]|90)"
audit_Control "$cmd" "$regex"

共有1个答案

阎志义
2023-03-14

问题是bash测试[[使用regex匹配运算符=~不支持常见的转义,例如\s用于空白或\w用于非单词字符。

它确实支持posix预定义的字符类,因此可以使用[[:space:]]代替\s

那么您的regex将是:
regex=“pass_max_days[[:space:]]*([0-9][1-8][0-9]90)”

您可能需要添加锚^$以确保整行匹配,则regex为
regex=“^pass_max_days[[:space:]]*([0-9][1-8][0-9]90)$”

如果没有行尾锚点,您可以在匹配后匹配带有尾随数字的行,因此pass_max_days9077将匹配pass_max_days90,尾随的“77”不会阻止匹配。

这个答案还提供了一些关于Bash的[[]]构造以及=~运算符的非常有用的信息。

 类似资料:
  • 问题内容: 所以我有一个脚本,可以在服务器上输出详细信息。问题是我需要输出是。最好的方法是什么?这是bash脚本: 所以我想要的输出是这样的: 谢谢。 问题答案: 如果只需要输出小的JSON,请使用: 或者,如果您需要产生更大的JSON,请使用[leandro-mora]解释的heredoc。如果您使用here- doc解决方案,请确保对他的回答进行投票: 一些较新的发行版具有一个名为:或类似名称

  • 问题内容: 我有一个bash脚本,在其中我需要遍历find命令的输出的每一行,但是看来我正在遍历find命令中的每个Word(以空格分隔)。到目前为止,我的脚本如下所示: 我希望这会产生如下输出: 但是我很想得到这样的输出: 我在这里做错了什么? 问题答案: 由于您没有使用的任何更高级的功能,因此可以使用简单的模式来遍历子目录:

  • 我是一名计算机科学专业的学生,目前正在从事一项Linux作业,该作业分为多个任务。 我正在处理的当前任务要求我提示用户输入他们的姓名和一天中的时间,然后使用if语句评估输入并输出适当的消息。我还必须查找文件并输出适当的消息。如果文件不存在,我已在下面插入了我的尝试。 执行此代码时,我会收到以下错误消息: 如果有人能给我一些指点或提示,告诉我哪里出错了,那就太好了

  • 大家好,早上好。 我只是想看看是否可以将Compare-Object的输出格式化为pscustomObject。我看了一下以下类似的问题: PowerShell比较对象侧边指示器 比较对象格式输出 比较对象输出格式 …但是,我似乎只是不明白它的概念。我讨厌问已经回答过的与此相关的问题,但是,我只是有点困惑。第三个链接是我唯一开始理解的链接,但仍然迷失在酱汁中。 只是希望根据返回属性分离输出. 不幸

  • 我正在使用bash脚本进行一个项目,以读取三个不同的. csv文件并输出类似的行。三个. csv文件的格式相同,信息相同,但第二列可能不同。例如,如果我有三个csv文件,分别名为A. csv、B. csv和C. csv。 运行程序后,我希望得到如下输出: 我已经读了关于dium3的文章,但这只是输出与我正在尝试做的相反的差异。任何帮助都将不胜感激。谢谢

  • 我已经使用这个正则表达式测试器来检查我的正则表达式是否有效:http://regex101.com/ 当我在RegEx-tester中输入RegEx时,它显示子字符串被捕获。 现在我想使用正则表达式从文件中 grep 子字符串。到目前为止,我对这个说法没有运气: grep 不会抛出任何错误。它根本不会像找不到匹配项时那样给出结果。 我尝试过用反斜杠来转义grep语句中的撇号,但是没有用。 非常感谢