Linux

grep + 僅當值在行尾時才匹配值

  • January 9, 2013

請告知我的程式碼有什麼問題,(我在 OS linux 和 solaris 上執行此程式碼)

我沒有得到這條線:

   "file ended with .tmp"

例子:

我需要驗證 $FILE 是否以**.tmp.old**等結尾…

帶有以下範例的程式碼設置參數:FILE=hosts.tmp

所以我希望 grep 將匹配**“.tmp** ”,因為**.tmp**是最後一個字元

  • 與“,TEMP”或“previos”或“-OLD”等其他令牌相同

程式碼(ksh 腳本)

    TOKENS=".tmp .old .previous -log temp ,TEMP -OLD previos"

    FILE=hosts.tmp

     for TOKEN in ` echo $TOKENS `

       do

       [[ ` echo $FILE  | grep -c '$TOKEN$'  ` -eq 1 ]] && echo "file ended with $TOKEN"

       done

您的程式碼有兩個問題:

1)當TOKEN被傳遞給grep時,你需要-像這樣逃避:

TOKENS=".tmp .old .previous \-log temp ,TEMP"

2)您正在使用單引號,這意味著變數沒有被擴展,用引號替換:

[[ ` echo $FILE  | grep -c "$TOKEN$"  ` -eq 1 ]] && echo file ended with $TOKEN

引用自:https://serverfault.com/questions/464392