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.
  • sed에서 이를 수행 할 수 있는 방법이 있다면 awk에서 -필드 구분 기호로 (하이픈)을 설정 하고 이를 awk수행한 다음 를 사용하여 전체 줄을 인쇄합니다 .sed '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

관련 정보