Bash正则表达式在里面不匹配if

时间:2017-03-12 12:52:49

标签: bash shell

我有一个文件/tmp/gish.dat,其中包含一个数字(大于0,一个或多个数字)或什么都没有。

如果存在数字,我希望我的函数回显#以及数字(例如#64)。如果没有号码,我希望我的功能什么都不做。

   get_issue() {
        if [ -f "/tmp/gish.dat" ]
        then
            iss=$(cat /tmp/gish.dat | grep -Eo '[0-9]+')
            if [[ iss =~ '[0-9]+' ]]
            then
              echo "#$iss"
            fi
        fi
    }

出于某种原因,内心如果永远不匹配。对bash来说很新。

3 个答案:

答案 0 :(得分:4)

如果你在[[...]]内搜索一个正则表达式,它只是一个字符串。

'[0-9]+'替换为[0-9]+

答案 1 :(得分:2)

您可以这样重写代码:

   get_issue() {
        if [ -f "/tmp/gish.dat" ]
        then
            iss=$(grep -Eo '[0-9]+' /tmp/gish.dat)
            if [[ $iss ]]
            then
              echo "#$iss"
            fi
        fi
    }

由于grep -Eo仅提取匹配的数字部分,因此无需在if中再次将提取的字符串与正则表达式匹配。 <{1}}在[[ $iss ]]不为空时为真。

答案 2 :(得分:0)

如果您需要打印#64,#45等内容,请按以下步骤更改您的代码,

 if [ -f "/tmp/gish.dat" ]
    then
        iss=$(cat /tmp/gish.dat | grep -Eo '[0-9]+' | tr '\n' ' ')
        for isss in $iss    
        do  
                if [[ $isss =~ '[0-9]+' ]]
                then
                  echo "#$isss"
                fi  
        done;

网络连接

看看这个