【问题标题】:I'm not able to write regular expression below file我无法在文件下面写正则表达式
【发布时间】:2015-05-18 13:22:03
【问题描述】:

我认为我在某处做错了,请告诉我。正则表达式有问题。

#!/bin/ksh

file="11111111_111.XXXX"
# file="11111111_111.XXX"

case $file in

        /[0-9]*\_.*\.XXXX/)

                echo "Inside SFTP"
        ;;
        [0-9]{8}_\d*\.XXX)

                echo "Inside WHS"
        ;;

        *)
                echo "There is no file"

        ;;
esac

【问题讨论】:

  • 您到底想达到什么目标?请提出一个完整的问题并举例说明。
  • 案例评估使用通配符,而不是正则表达式。
  • @speakr thnx 4 你的回复基本上我正在尝试匹配这个文件 11111111_111.XXXX 并希望通过case语句来实现。

标签: linux ksh


【解决方案1】:

case-patterns 不是 bash 中的正则表达式。相反,它们会根据“路径名扩展”的规则进行扩展。执行man bash 并搜索该短语以查看详细信息。

【讨论】:

  • 对不起@Peder 这是korn shell。
  • 您的示例前面说过 bash。我不是 ksh 专家,但我相信那里也是如此。 google 出现的第一个 ksh 手册页强化了这种信念。
【解决方案2】:

已编辑

有不同版本的 ksh 具有不同的语法。匹配的是file name patterns,这与其他语言的正则表达式不同。我发现以下模式适用于 Linux 和 AIX:

+([0-9])_+([0-9]).XXXX

在最低通用级别,不支持像 \d 这样的字符类或 {n} 的匹配数,所以如果你想精确匹配八位数字,你需要输入 [0-9] 八次。

【讨论】:

  • thanx 4 你的回复我得到以下错误 case.sh:第 8 行:意外标记附近的语法错误 (' case.sh: line 8: {8}(\d)_+(\d)\.XXXX)跨度>
  • 但在 AIX 上运行时出现语法错误。所以 Linux 和 AIX 之间的 ksh 语法不同。
猜你喜欢
  • 2021-08-10
  • 2021-06-29
  • 2016-04-11
  • 2017-11-01
  • 2020-08-15
  • 2019-05-02
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
相关资源
最近更新 更多