我的程序启动了一些服务并将其输出存储在tmp
变量中,如果它以FATAL
关键字开头,我想匹配变量的内容?如果它包含,我将使用Port in use
命令
echo
例如,如果tmp
包含FATAL: Exception in startup, exiting.
我可以sed
:echo $tmp | sed 's/^FATAL.*/"Port in use"/'
但我想使用内置if
来匹配模式。
如何使用shell内置功能来匹配REGEX?
答案 0 :(得分:5)
POSIX shell没有UNIX ERE或PCRE的正则表达式运算符。但确实有case
keyword:
case "$tmp" in
FATAL*) doSomethingDrastic;;
*) doSomethingNormal;;
esac
您没有标记问题bash
,但如果您确实拥有该shell,则可以进行其他类型的模式匹配甚至是ERE:
if [[ "$tmp" = FATAL* ]]; then
…
fi
或
if [[ $tmp =~ ^FATAL ]]; then
…
fi
答案 1 :(得分:1)
if [ -z "${tmp%FATAL*}" ]
then echo "Start with"
else
echo "Does not start with"
fi
在AIX下的KSH,BASH工作。认为它在Linux下也可以。
不是真正的正则表达式,但是用于文件匹配的有限正则表达式(shell的内部,而不是像shell中有自己版本的sed / grep / ...)。所以*和?可以用