我在变量中有一个文本我希望完全匹配它,但它可能包含特殊字符(如点),我试图保证这样做:
MATCH=$(cat SOMEFILE | sed 's/\./\\./g')
LINES=$(grep "[[:space:]]$MATCH\$" OTHERFILE) # retrieves lines ending with the matched content
它现在有效,但我想知道是否有更好的方法?如果偶然MATCH
包含另一个特殊字符[
,|
或任何其他正则表达式?
答案 0 :(得分:0)
我创建了自己的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
开头的参数会连接到原始表达式以及其他情况,在第一个--
到来之后grep
1}}参数本身。