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

KShell正则表达式比较不起作用,shell,unix,scripting,ksh,Shell,Unix,Scripting,Ksh,在使用正则表达式的shell脚本中,我有下面的if条件。基本上,我想知道$main是否包含字符串$pattrn main="$line1" pattrn="$line" if [[ $main = @($pattrn) ]]; then echo $line>>/lawson/prod/work/errval fi if [[ $main = @($pattrn) ]] 即使我有几个匹配的值,但这是不返回任何内容的条件 提前感谢我想我已经有了一个解决方案,尽管sed或awk可能有

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

main="$line1"
pattrn="$line"
if [[ $main = @($pattrn) ]];
then
echo $line>>/lawson/prod/work/errval
fi
if [[ $main = @($pattrn) ]]
即使我有几个匹配的值,但这是不返回任何内容的条件


提前感谢

我想我已经有了一个解决方案,尽管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的输出字符串中找到该字符串

希望有帮助

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

main="$line1"
pattrn="$line"
if [[ $main = @($pattrn) ]];
then
echo $line>>/lawson/prod/work/errval
fi
if [[ $main = @($pattrn) ]]
这将测试完全相同的匹配。要测试
$main
是否包含
$pattrn
,我们必须指定
$pattrn
前后可能有文本:

if [[ $main = @(*$pattrn*) ]]
顺便说一下,因为我们只有一种模式,所以我们也可以不使用
@(…)

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

考虑编辑你的问题,包括在<代码> $LIN 1<代码>和<代码> $行< /代码>中找到的示例值。祝你好运。它不使用正则表达式。它使用glob模式——阅读ksh手册页的“文件名生成”部分。您需要显示您的模式是什么,以便我们指出错误。