Regex 对于带有变量的grep,有没有自动转义的方法?

Regex 对于带有变量的grep,有没有自动转义的方法?,regex,bash,grep,escaping,Regex,Bash,Grep,Escaping,我在一个变量中有一个文本,我希望完全匹配它,但它可能包含特殊字符,如点,我试图保证这样做: MATCH=$(cat SOMEFILE | sed 's/\./\\./g') LINES=$(grep "[[:space:]]$MATCH\$" OTHERFILE) # retrieves lines ending with the matched content 它现在起作用了,但我想知道是否有更好的方法?如果碰巧匹配包含另一个特殊字符,如[,|或任何其他正则表达式?我创建了自己的grep解决

我在一个变量中有一个文本,我希望完全匹配它,但它可能包含特殊字符,如点,我试图保证这样做:

MATCH=$(cat SOMEFILE | sed 's/\./\\./g')
LINES=$(grep "[[:space:]]$MATCH\$" OTHERFILE) # retrieves lines ending with the matched content

它现在起作用了,但我想知道是否有更好的方法?如果碰巧匹配包含另一个特殊字符,如[,|或任何其他正则表达式?

我创建了自己的grep解决方案:

sgrep() {
    EXPR=
    while :; do
        [ "$1" == '--' ] && shift && break
        [ -z "$1" ] && break
        if [ "${1:0:2}" == '-t' ]; then
            EXPR="$EXPR$(echo "${1:2}" | sed 's/[][()\.^$?*+]/\\&/g')"
        elif [ "${1:0:2}" == '-e' ]; then
            EXPR="$EXPR${1:2}"
        else
            EXPR="$EXPR$1"
        fi
        shift || break
    done
    egrep "$EXPR" "$@"
}
使用示例:

sgrep -e^ -t192.168 -e[0-9.]*[[:space:]] -- /proc/net/arp

以-t开头的所有内容都被视为文本并被转义,以-e开头的参数被连接到原始表达式以及其他情况,在第一个-t之后是grep参数本身。

,我想知道是否有更简单的方法来实现这一点。您能提供示例输入和预期输出吗?在这种情况下,我正在搜索IP地址s、 但它可以是任何东西,比如自由文本。在这种情况下,为了更好地支持正则表达式和转义功能,最好使用PHP/perl/Java。不幸的是,它是一个dd wrt路由器,不支持这种复杂的语言。