패턴 앞과 뒤의 행 일부를 다르게 처리하는 Linux 명령

패턴 앞과 뒤의 행 일부를 다르게 처리하는 Linux 명령

내 원본 텍스트는

11  2   CDTZ - b00264ab
36  37  CDTB - c2330001

출력 텍스트를 다음과 같이 표시하고 싶습니다.

11  2   CDTZ - b0:02:64:ab
36  37  CDTB - c2:33:00:01

하이픈 뒤에 오는 문자열의 경우 2자마다 콜론을 추가해야 합니다.

제가 지시할 수 있는 일반적인 텍스트 처리 명령이 있나요?

  1. 하이픈 앞(포함)의 모든 문자열은 그대로 유지되어야 합니다.
  2. 하이픈 다음에 오는 2자마다 콜론을 삽입합니다.

일반적으로 패턴(여기서는 하이픈) 앞과 뒤의 텍스트를 다르게 처리해야 합니다.

지금까지 나의 노력:

  • sed나는 및 에 대한 기본 지식을 가지고 있습니다 awk.
  • sedan 내부에서 수행할 수 있는 방법이 있는 경우 필드 구분 기호로 (하이픈)을 awk설정 하고 on 을 수행한 다음 를 사용하여 전체 줄을 인쇄합니다 .-awksed 's/../&:/g;s/:$//'$2print $0

답변1

이 시도,

awk -v OFS='\t' '{gsub(/../,"&:",$NF); sub(/:$/,"",$NF);}1' file
11  2   CDTZ    -   b0:02:64:ab
36  37  CDTB    -   c2:33:00:01
  • gsub(/../,"&:",$NF):각 커플이나 문자에 후행을 추가합니다 .
  • sub(/:$/,"",$NF):이전에 추가된 마지막 필드 끝에 불필요한 항목을 제거합니다.gsub

답변2

끝에 있는 16진수는 항상 8자라고 가정합니다.

$ sed 's/\(..\)\(..\)\(..\)\(..\)$/\1:\2:\3:\4/' file
11      2       CDTZ    -       b0:02:64:ab
36      37      CDTB    -       c2:33:00:01

관련 정보