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路由器,不支持这种复杂的语言。