"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