로그 파일을 처리하는 데 도움이되는 스크립트를 작성하고 있습니다. 그것에, 내 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
당신이 볼 수 있듯이, \ 문신 grep을하기 위해 변수를 통해 전달 될 때 일치하는 항목을 생성하지 않습니다 \의 일부입니다. 일치해야하는 것은 (리터럴 공간에서) (리터럴 탭)입니다. 이 변수를 사용하지 않고 제대로 작동하지만, 내 복수 grep 호출을 관리하기 쉽게하기 때문에 하나를 사용하고 싶습니다. grep이 변수를 통과 할 때이 일치를 올바르게 수행하도록하려면 어떻게해야합니까?
'egrep' /'grep -E'를 대신 쓰면 어떨까요? – fedorqui
변수를 확장 할 때 따옴표가 처리되지 않습니다. – Barmar
그것은 나를 위해, grep -E 또는 egrep을 사용하여 작동합니다. – michael501