首页 > 解决方案 > 如何修复bash脚本以在另一个文件中查找正则表达式?

问题描述

我尝试使用以下文件在文件中查找某个正则表达式并回显一些输出

content=`cat $1 `

REGEX_RANGE="s/COPYRIGHT .*[0-9]{4}-[0-9]{4} alex4200"
REGEX_SINGLE="s/COPYRIGHT .*[0-9]{4} alex4200"

if [[ $content =~ $REGEX_RANGE ]];
then
    echo "File has year range"
else
    if [[ $content =~ $REGEX_SINGLE ]];
    then
        echo "File has single year"
    else
        echo "No REGEX found"
    fi
fi

test.txt但是,当我在包含内容的文件上使用此脚本时

COPYRIGHT (c) 2020 alex4200

它返回No REGEX found。我在这里想念什么?

标签: regexbash

解决方案


您的模式有效,尽管可能不是您想要的。

$: grep -E 'COPYRIGHT .*[0-9]{4}-[0-9]{4} alex4200' file
COPYRIGHT (c) 2020-9999 alex4200
$: grep -E 'COPYRIGHT .*[0-9]{4} alex4200' file
COPYRIGHT (c) 2020 alex4200
COPYRIGHT (c) 2020-9999 alex4200

您的单个 reexe 将匹配两种格式;.*不仅吃下一个空间,还吃第一(c)年和一个范围模式的冲刺。

$: if grep -qE 'COPYRIGHT .*[0-9]{4} alex4200' file; then echo found; else echo nope; fi
found

推荐阅读