별도의 라인에서 로그 출력 필터링

별도의 라인에서 로그 출력 필터링

아래와 같이 일치하는 모든 파일을 찾기 위해 디렉토리에서 재귀 grep을 수행했습니다.

grep -ER "match_string1|match_string2" /path/to/dir/

내가 얻는 결과는 다음과 같습니다.

/path/to/dir/timestamp.log:match_string1
/path/to/dir/timestamp.log:match_string2
/path/to/dir/timestamp.log:match_string2

여기서 match_string1은 모델#을 나타냅니다. 여기서 match_string2는 테스트 결과를 나타냅니다.

모델 번호와 테스트 결과가 특정 기준과 일치할 때 계산할 수 있도록 이 줄을 병합하고 싶습니다.

참고: match_string2와 match_string1 두 개를 같은 줄에 넣을 수 있습니다.

예상되는 출력 예:

/path/to/dir/timestamp.log:match_string1; /path/to/dir/timestamp.log:match_string2; /path/to/dir/timestamp.log:match_string2

당신의 도움을 주셔서 감사합니다

답변1

sed '/match_string1/{
     :1
     N
     /\n.*match_string2/s/\n/; /
     t1
     P
     D
                     }'

스크립트가 라인을 발견하면 match_string1패턴에 다음 라인을 추가하고 추가된 라인이 있는지 확인합니다. match_string2그렇다면 newline 기호를 대체 ;하고 확인할 다음 라인을 추가합니다. 그렇지 않은 경우 match_string2(아직 교체가 발생하지 않은 경우) 스크립트는 첫 번째 줄을 인쇄하고 두 번째 줄부터 처리를 시작합니다.

관련 정보