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