KShell正则表达式比较不起作用

时间:2013-12-04 18:23:39

标签: shell unix scripting ksh

我的shell脚本中有以下if条件,它使用正则表达式。基本上我想知道$ main是否包含字符串$ pattrn。

main="$line1"
pattrn="$line"
if [[ $main = @($pattrn) ]];
then
echo $line>>/lawson/prod/work/errval
fi

即使我的匹配值很少,但这个If条件没有返回任何内容。

先谢谢

2 个答案:

答案 0 :(得分:0)

我认为我有一个解决方案,尽管可能有更优雅的解决方案,使用sed或awk。

#!/bin/ksh 
variable1="ABCDEF"
variable2="CDE"

printf "variable1( %s )\n" $variable1

if( echo $variable1 | grep -q $variable2 ); then
    printf "variable2 appears in variable1\n"
fi

variable3="GHI"

if( echo $variable1 | grep -q $variable3 ); then
    printf "variable3 appears in variable1\n"
else
    printf "variable3 does not appears in variable1\n"
fi

输出

variable1( ABCDEF )
variable2 appears in variable1
variable3 does not appears in variable1

说明:您正在检查括号中命令的返回值,以确保结果等于0.使用管道后面的grep,您将检查grep是否在echo的输出字符串中找到了该字符串。 / p>

希望有所帮助。

答案 1 :(得分:0)

  

我想知道$ main是否包含字符串$ pattrn。

if [[ $main = @($pattrn) ]]

这将测试完全相同的匹配。要测试$main 是否包含 $pattrn,我们必须指定$pattrn之前和之后可能有文字:

if [[ $main = @(*$pattrn*) ]]

顺便说一下,由于我们只有一种模式,我们也可以不用@(…)

if [[ $main = *$pattrn* ]]