Shell变量匹配

时间:2017-01-24 20:45:52

标签: regex shell variables

我需要一些脚本帮助。我希望这个脚本能够将“Det funkar med serier”回显到我的日志文件中。

#!/bin/sh

HDFILM1=/media/store1/HD-film
HDFILM2=/media/store2/HD-film
SERIER1="/media/store0/Serier*"
SERIER2=/media/store2/Serier

LOGFILE=/home/holmen/script/rtorrent_unrar_move_files.sh.log

rm -rfv $LOGFILE
echo 2 = $2 2>&1 >> $LOGFILE
echo 3 = $3 2>&1 >> $LOGFILE

if [ $3 = $HDFILM1 ] || [ $3 = $HDFILM2 ]; then
        echo "Det funkar med filmer" 2>&1 >> $LOGFILE
elif [[ $3 =~ $SERIER1 ]]; then
        echo "Det funkar med serier" 2>&1 >> $LOGFILE
else
        echo "Det funkar INTE" 2>&1 >> $LOGFILE
fi

日志文件中的输出。

2 = Family.Guy.S10E08.HDTV.Custom.HebSub.XviD-Extinct
3 = /media/store0/Serier/Family_Guy
Det funkar INTE

正如你所看到的,我无法在 $ SERIER1 变量中使用正则表达式来工作,我无法找到解决方法。

我希望if条件与变量中的正则表达式中的 / media / store0 / Serier / Family_Guy 匹配,例如的 ^ /媒体/ store0 / Serier

我如何获得if部分

elif [[ $3 =~ $SERIER1 ]]; then

要工作吗?

1 个答案:

答案 0 :(得分:1)

请注意,您的SERIER1变量包含正则表达式。它包含一个glob。 Globs是另一种模式规范语言,如regexp,但它们不兼容。

在glob中,*表示零或更多的任何内容

在正则表达式中,*表示零个或多个前一个字符

这种区别很重要。模式:

r*

在glob匹配rainbowrange以及r

在正则表达式匹配rrr以及rrrrrr

所以,你有这种模式:

/media/store0/Serier*

仅匹配:/media/store0/Serier/media/store0/Serierrr/media/store0/Serierrrrrrr等。

我认为你想要的是:

/media/store0/Serier.*

因为在regexp中{​​{1}}意味着什么。因此.表示零或多于等于glob中的.*的任何内容。