繁体   English   中英

Shell脚本:if语句中的RegEx

[英]Shell Scripting: RegEx in if Statement

我似乎无法弄清楚如何在if语句中正确编写正则表达式。 我希望它打印出所有带有“结束日期”的行。

NUMBERS包含一个包含以下内容的文本文件:

End Date    ABC ABC ABC ABC ABC ABC
05/15/13    2   7   1   1   4   5  
04/16/13    4   3   0   1   3   6  
03/17/13    6   9   3   8   5   9  
02/18/13    8   2   7   1   0   1  
01/19/13    1   9   2   2   5   2  
12/20/12    7   2   7   1   0   1 

以下是我的代码片段,我遇到了以下问题:

if [ -f $NUMBERS ]
then
        while read line
        do
                if [ $line = ^End ]
                then
                        echo "$line"
                else
                        echo "BROKEN!"
                        break                   
                fi
        done < $NUMBERS
else
        echo "===== $NUMBERS failed to read  ====="
fi

输出是:

破碎!

如果你正在使用bash,请尝试=~

...
if [[ $line =~ ^End ]]

请注意,以下内容不起作用: 1

if [[ "$line" =~ "^End" ]]

便携式解决方案是使用case ,其支持通配符(水珠通配符;不实际正则表达式)出来,如果框。 语法略显怪异,但你已经习惯了。

while read -r line; do
    case $line in
        End*) ... your stuff here 
            ... more your stuff here
            ;;   # double semicolon closes branch
    esac
done

您可以使用以下内容检查该line是否以End开头

if [[ "$line" == End* ]]

如果要使用正则表达式,可以使用以下内容。

if [[ "$line" =~ ^End* ]]

http://tldp.org/LDP/abs/html/comparison-ops.html

另请注意,建议始终引用您的变量。

http://tldp.org/LDP/abs/html/quotingvar.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM