2016-11-14 77 views
0

我试图找到一种更好的方法来匹配我的bash脚本中每周的日子。下面是我有工作:BASH正则表达式来匹配星期几

if [[ $LINE == *"Sun"* ]] || [[ $LINE == *"Mon"* ]] || [[ $LINE == *"Tue"* ]] || [[ $LINE == *"Wed"* ]] || [[ $LINE == *"Thu"* ]] || [[ $LINE == *"Fri"* ]] || [[ $LINE == *"Sat"* ]]; then 

我通过Sun解析开始与周一的文件中的所有行:

Mon cat dog bird 
Tue bird cat dog 

但我知道必须有一个更好的办法。我试过很多东西,这里有一些失败的:

DAYS_REGEX='*[S|M|T|W|F][u|o|e|h|r|a][n|e|d|u|i|t]*' 
if [[ $LINE =~ $DAYS_REGEX ]] ; then 

if [[ $LINE == *"Sun|Mon|Tue|Wed|Thu|Fri|Sat"* ]] ; then 

我觉得应该有一个正则表达式,将是这样的,但我不能用别针把它下:

(SMTWF/uoehra/neduit)

我有什么作品,但我想了解如何将正则表达式到我的bash脚本。任何帮助/建议将不胜感激。 TIA

+1

愚蠢的问题:如果你的所有行*开始*与星期几,那么为什么你现有的glob模式在开始时有'*' ING? – ruakh

+0

我在网上发现了一段代码,并将其扩展为包含一周中的所有日子。现在我开始使用正则表达式,我想知道如果我可以删除那些,但我还没有尝试过。 – user2615269

+0

在一周中没有* Regex *,你可以将它们全部命名,或者有一个匹配它们的超集的正则表达式,在这种情况下它有可能匹配不完全是星期几的东西 –

回答

3

要匹配的正则表达式:

if [[ $LINE =~ Sun|Mon|Tue|Wed|Thu|Fri|Sat ]]; then 
    echo match 
fi 
1

我会用一个case语句:

case "$LINE" in 
    Mon*|Tue*|Wed*|Thu*|Fri*|Sat*|Sun*) 
     echo "Some logic here..." 
     ;; 
esac 

然后您可以拆分这伸到各个天单独的逻辑,如果你需要:

case "$LINE" in 
    Mon*|Tue*|Wed*) 
     echo "Different logic" 
     ;; 
    Thu*|Fri*|Sat*|Sun*) 
     echo "Some logic here..." 
     ;; 
esac 
+0

最好是像上面那样明确,而不是像下面这样几乎不可读的东西:DAYS_REGEX ='* [S | M | T | W | F] [u | o | e | h | r | a] [n | e | d | u | i | t] *'' –

+0

啊!我从来没有使用或见过病例。这很有趣,我会检查出来。谢谢! – user2615269