我正在编写帮助我处理日志文件的脚本。其中,我有我的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