Bash脚本不采用正则表达式模式

时间:2019-03-13 10:57:01

标签: regex bash filereader

这是我第一次使用bash,我想开发一个小脚本,当文本文件作为参数提供时,它将逐行读取文件,并在每一行中搜索与某个正则表达式模式匹配的单词。如果一行中的单词与正则表达式模式匹配,我希望程序打印该单词。

下面显示的是我的代码:

#!/bin/bash
pat = "[((?:[a-z][a-zA-Z0-9_]*))(\\.)(png)]"
while IFS='' read -r line || [[ -n $line ]];do
   echo "Text read from file: $line"
   if [[ $line =~ $pat ]];
   then
        echo "line '$line'"
   else
        echo "DOES NOT MATCH BRANCH_REGEX"
   fi
done < $1

运行此脚本时,脚本会说:

  

test2.sh:2:test2.sh:pat:找不到从文件读取的文本:#{{   性能测试结果test2.sh:5:   test2.sh:[[:找不到匹配的BRANCH_REGEX

我无法确定脚本为什么不采用模式

2 个答案:

答案 0 :(得分:1)

您的正则表达式不适用于bash。 bash不支持非捕获组,并且双转义点也是一个问题。此外,=周围有空格,这是语法错误。您应该在shellcheck.net上检查脚本是否存在所有语法问题。

您只需要使用此正则表达式:

pat='[a-z][a-zA-Z0-9_]*\.png'

答案 1 :(得分:0)

修复您的var声明(删除空格):

pat="[((?:[a-z][a-zA-Z0-9_]*))(\\.)(png)]"