2014-11-03 76 views
0

我將我的服務器移動到一個新的(更便宜)。兩者都有不同版本(5.0和6.5)的Linux(CentOS)。我有一個shell腳本過濾器線路輸出的日誌:正則表達式不匹配,不知道爲什麼

if [ -f $URLFILE ] 
then 
    echo "File found, getting userinfo..." 
    while read line; 
    do 
    if [[ $line =~ ".Userlist: .*" ]] 
    then 
     echo "Found user information." 
     echo $line > /home/....net.txt; 
... 

所以,如果紅線正則表達式匹配,應該呼應到文件中。這在舊系統上工作正常,但正則表達式在新系統上不匹配(沒有任何其他更改)。只要互聯網上的正則表達式測試儀告訴我,正則表達式是正確的。

+0

什麼版本bash'(我假設的'是你殼正在使用)在每臺機器上? – chepner 2014-11-03 16:12:27

回答

1

有2個問題:

  1. sh不支持使用=~bash
  2. 正則表達式不應該被引用和您的變量最好被引用正則表達式匹配。

您可以在BASH使用:

if [[ "$line" =~ Userlist:[[:blank:]] ]] 

或只是完全避免使用正則表達式,並使用glob matching

if [[ "$line" == *"Userlist: "* ]] 
+0

謝謝,這有幫助!我仍然不明白爲什麼它在舊服務器上工作了多年,但我可能永遠不會知道...... – WarWolfen 2014-11-03 18:43:43

+0

其實我知道它爲什麼會在舊系統上工作。這是因爲舊的BASH版本例如3.1用於引用正則表達式字符串。這就是爲什麼較新的BASH版本有一個名爲'compat31'的特殊變量,以使其行爲與舊版本相似。 – anubhava 2014-11-03 18:45:50