【问题标题】:KShell regular expression comparision not workingKShell 正则表达式比较不起作用
【发布时间】:2013-12-21 09:18:39
【问题描述】:

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

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

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

提前致谢

【问题讨论】:

  • 考虑编辑您的问题以包含将在 $line1$line 中找到的示例值。祝你好运。
  • 它不使用正则表达式。它使用 glob 模式——阅读 ksh 手册页的“文件名生成”部分。
  • 你需要展示你的模式是什么让我们说什么是错的。

标签: shell unix scripting ksh


【解决方案1】:

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

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

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

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

顺便说一句,既然我们只有一个模式,我们也可以不用@(…)

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

【讨论】:

    【解决方案2】:

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

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多