1

我的程序启动一些服务并将其输出存储在tmp变量中,如果它以关键字开头,我想匹配变量的内容FATALPort in use如果它包含我将使用echo命令打印

例如,如果tmp包含FATAL: Exception in startup, exiting.

我可以这样做sedecho $tmp | sed 's/^FATAL.*/"Port in use"/'

但我想使用内置if来匹配模式。如何使用 shell 内置功能来匹配 REGEX?

4

2 回答 2

5

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
于 2013-08-15T15:51:55.667 回答
1
if [ -z "${tmp%FATAL*}" ]
   then echo "Start with"
 else 
   echo "Does not start with"
 fi

在 AIX 下从事 KSH、BASH 工作。认为在Linux下也可以。

不是真正的正则表达式,而是用于外壳文件匹配的有限正则表达式(外壳内部,不像 sed/grep/... 内部有自己的版本)。所以 * 和 ? 可用于

于 2013-12-12T15:18:59.723 回答