답변1
일치하는 선을 장식으로 인쇄하는 대신 일치하는 선을 장식하고 모든 것을 인쇄합니다.
awk '/User@Host:/ { $0 = "\033[32m" $0 "\033[39m" }; /Query_time:/ { $0 = "\033[29m" $0 "\033[39m" }; 1'
이 awk
프로그램은 세 가지 패턴과 관련 작업으로 구성됩니다.
- 일치하는 행
User@Host:
은 으로 처리되며$0 = "\033[32m" $0 "\033[39m"
, 이는 현재 행을 주어진 이스케이프 코드로 둘러쌉니다. Query_time:
일치 하는 라인은$0 = "\033[29m" $0 "\033[39m"
;- 패턴이
1
0이 아닌 라인(모든 라인)은 현재 라인을 인쇄하는 기본 작업으로 처리됩니다.
이는 누적됩니다. 패턴이 현재 줄과 일치하는 모든 작업은 정의된 순서대로 실행됩니다. 일치하는 줄이 User@Host:
수정되고(첫 번째 작업) 인쇄됩니다(세 번째 작업). 일치하는 줄이 Query_time:
수정되고(두 번째 작업) 인쇄됩니다(세 번째 작업). 둘 다 일치하지 않는 줄이 인쇄됩니다(세 번째 작업).
이는 한 줄이 아직 처리되었는지 추적하지 않고도 모든 줄을 인쇄하는 가장 간단한 기술입니다(한 줄을 두 번 인쇄하는 것을 피하기 위해). 모든 작업 명령문 세트에서 무언가를 인쇄하는 대신 현재 행을 적절하게 수정하고 한 번만 인쇄합니다(그러나 항상 인쇄합니다).