如何将正则表达式与灰匹配?
Posted
技术标签:
【中文标题】如何将正则表达式与灰匹配?【英文标题】:How to match regexp with ash? 【发布时间】:2014-01-27 10:51:46 【问题描述】:以下代码适用于 bash,但现在我需要它用于 busybox ash ,它显然没有“=~”
keyword="^Cookie: (.*)$"
if [[ $line =~ $keyword ]]
then
bla bla
fi
有合适的替代品吗?
抱歉,如果这是超级用户问题,无法决定。
编辑:也没有 grep、sed、awk 等。我需要纯 ash。
【问题讨论】:
哇,没有 POSIX。只是出于好奇,你在什么系统上运行? 【参考方案1】:对于 this 特定的正则表达式,您可能会使用parameter expansion hack:
if [ "$line" = "Cookie: $line#Cookie: " ]; then
echo a
fi
或者pattern matching notation + case hack:
case "$line" in
"Cookie: "*)
echo a
;;
*)
;;
esac
但是,这些解决方案的功能确实不如 regexes,因为它们没有真正的 Kleene 明星 *
(只有 .*
),您应该真的获得一些更强大的工具(真正的编程像 Python 这样的语言?)安装在那个系统上,否则你会受苦。
【讨论】:
感谢这项工作。正如你所说,它非常有限。它是一个空间很小的路由器,无法安装 perl 或 python。可以试试 C.【参考方案2】:Busybox 带有一个expr
小程序,它可以进行正则表达式匹配(锚定到字符串的开头)。如果正则表达式匹配,则其返回码将为 0。示例:
# expr "abc" : "[ab]*"
# echo $?
0
# expr "abc" : "[d]*"
# echo $?
1
【讨论】:
【参考方案3】:对我有用的是使用 Busy Box 的 grep 和 wc 实现:
MATCHES=`echo "$BRANCH" | grep -iE '^(master|release)' | wc -l`
if [ $MATCHES -eq 0 ]; then
echo 'Not on master or release branch'
fi
【讨论】:
以上是关于如何将正则表达式与灰匹配?的主要内容,如果未能解决你的问题,请参考以下文章