grep 정확한 문자열 변수

grep 정확한 문자열 변수

"aaa.log" 파일에서 정확한 문자열 'CAAJ'를 파악하고 그 내용을 따르고 싶습니다.

cat aaa.log

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

CAAJ-TEST:de27ff:acldx003:rel7

CAAJ-TEST:de27ei:acldx003:rel7

CAAJ-TEST:de27ep:acldx003:rel7

예상 출력:

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

다음 코드를 시도 중입니다. 그리고 O/p를 얻습니다.

grep -E '(^|)CAAJ(:|$)' aaa.log

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

하지만 정확한 문자열 대신 변수를 사용하면 O/p를 얻을 수 없습니다.

var=CAAJ

grep -E '(^|)${var}(:|$)' aaa.log

OR 

grep -E '(^|)"${var}"(:|$)' aaa.log

이들 중 어느 것도 작동하지 않았습니다.

정확한 문자열 대신 변수를 사용하여 원하는 o/p를 얻고 싶습니다.

답변1

이 시도..

awk -F: '$1=="CAAJ" aaa.log

awk에서 변수 사용하기

awk -F: -vv="$var" '$1==v' aaa.log

grep 명령

grep "^$var:" aaa.log

답변2

우선, 나는 당신이 무엇인지 전혀 모릅니다생각하다괄호가 작동하지만 사용할 이유가 전혀 없습니다 (^|). 이는 "문자열의 시작 또는 아무것도 없음"을 의미합니다. 유효한 구문이라는 것에 놀랐습니다.

비슷하게,(:|$) 당신이 관심을 갖고 있는 모든 사건이 같은 장소에서 일어난다면 무의미해 보입니다.시작문자열의.

변수를 큰따옴표로 묶으면 확장됩니다. 작은 따옴표로 묶으면 그렇지 않습니다.

이에 대해서는 확장 정규식이 필요하지 않습니다.


대신에:

grep -E '(^|)'${var}'(:|$)'

사용:

grep ^CAAJ: aaa.log

또는:

var=CAAJ
grep "^${var}:" aaa.log

또는 관심 있는 필드 구분 기호가 이므로 :Awk를 사용하세요.

awk -F: '$1 == "CAAJ"' aaa.log

이 마지막 경우에 작은 따옴표는 셸을 위한 것이고 큰 따옴표는 Awk를 위한 것입니다. 를 포함하여 작은따옴표 안의 모든 내용은 $1그대로 Awk에 전달됩니다.

답변3

이 시도:

var=CAAJ;grep "^$var:" aaa.log;

답변4

노력하다

grep -E "(^|)${var}(:|$)" aaa.log

관련 정보