这是我第一次使用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
我无法确定脚本为什么不采用模式
答案 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)]"