繁体   English   中英

Bash 脚本 - 将字符串与变量空格与正则表达式进行比较

[英]Bash Script - compare string with variable spaces against regex

感谢您的时间和帮助我

我正在尝试制作一个脚本,将 grep 输出与我期望的结果进行比较。

grep 输出是:

Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)

由于每个服务器上的空格或制表符各不相同,因此我对这些空格使用正则表达式

[[:space:]]*

理论上它应该匹配正则表达式变量,但它不起作用。

有谁知道可能是什么问题?

function find_string () {

    if [[ $cmd =~ $regex ]]; then
        echo match
    else
        echo fail
    fi
}
cmd=`stat /etc/crontab | grep root`
regex="^Access:[[:space:]]*(0600/-rw-------)[[:space:]]*Uid:[[:space:]]*([[:space:]]*0/[[:space:]]*root)[[:space:]]*Gid:[[:space:]]*([[:space:]]*0/[[:space:]]*root)$"
find_string "$cmd" "$regex"

我已经更正了脚本中的许多问题,包括在正则表达式字符串中转义括号。

请尝试以下操作:

#!/bin/bash

function find_string {

    if [[ "$1" =~ $2 ]]; then
        echo "match"
    else
        echo "fail"
    fi
}

cmd=`stat /etc/crontab | grep root`

regex="^Access:[[:space:]]*\(0600/-rw-------\)[[:space:]]*Uid:[[:space:]]*\([[:space:]]*0/[[:space:]]*root\)[[:space:]]*Gid:[[:space:]]*\([[:space:]]*0/[[:space:]]*root\)$"

find_string "$cmd" "$regex"

注 - 运算符=~对其左侧的字符串与其右侧的扩展正则表达式执行正则表达式匹配。 字符串应该被引用,但扩展的正则表达式不应该被引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM