我正在編寫幫助我處理日誌文件的腳本。其中,我有我的grep標誌存儲在一個變量。標誌和字符串本身工作得很好,但是當我使用變量將它們傳遞給grep時,使用轉義字符的字符串部分不會產生任何匹配。如下所示:當它們來自變量時,grep不匹配字符串
grepvars="-B4 -Psihe 'caused\sby|unable|fault|error|deadlock|checkpoint|corrupt|fail|exception|fatal|severe|\tat\s'"
grep -B4 -Psihe 'caused\sby|unable|fault|error|deadlock|checkpoint|corrupt|fail|exception|fatal|severe|\tat\s' adapter_15.log > adapter_15-error1.log
grep $grepvars adapter_15.log > adapter_15-error2.log
wc -l *-error?.log
51398 adapter_15-error1.log
25032 adapter_15-error2.log
正如您所看到的,\ tat \ s部分在通過變量傳遞給grep時不會產生匹配。應該匹配的是(字面空格)處的(字面標籤)。雖然這可以在不使用變量的情況下正常工作,但我寧願使用它,因爲它使我的多個grep調用更易於管理。我需要做些什麼來確保grep在通過變量傳遞時正確執行此匹配?
如果您使用'egrep' /'grep -E'而不是? – fedorqui
擴展變量時不處理引號。 – Barmar
它適用於我,請使用grep -E或egrep – michael501