正则表达式和if shell脚本

时间:2013-08-15 15:47:10

标签: regex shell sed ksh

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

打印echo

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

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

来完成

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

2 个答案:

答案 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 / ...)。所以*和?可以用