ksh 환경의 파일에서 부분 문자열 추출

ksh 환경의 파일에서 부분 문자열 추출

아래와 같은 오류 메시지가 포함된 파일이 있습니다.

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1505) 
rsync error: error in rsync protocol data stream (code 12) at token.c(604)

예를 들어 첫 번째 줄에서는 23, 두 번째 줄에서는 12와 같이 코드 번호를 추출하고 싶습니다.

답변1

좋다

$ grep -o "(code [0-9]*" file | cut -d" " -f2
23
12

?

답변2

awk를 사용하면 다양한 방법으로 숫자를 추출할 수 있습니다. 아래 스크립트에서는 다음 패턴이 나타날 것으로 예상합니다.

  1. 공간
  2. (
  3. code
  4. 공간
  5. 일련의 숫자
  6. )
  7. 공간

...완전한 것은 아니므로 string으로 시작하는 줄로 일치 항목을 제한하여 범위를 더 제한해 보았습니다 rsync error:.

코드 의 나머지 부분은 print선행 및 후행 텍스트를 고려하여 문자열 길이 매개변수를 조정합니다.

awk '/^rsync error: .* \(code [[:digit:]]+\) / \
  { 
    match($0, " \\(code [[:digit:]]+\\) "); 
    print substr($0, RSTART + 7, RLENGTH - 9) ; 
  }' input

관련 정보