"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