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

관련 정보