
내 원본 텍스트는
11 2 CDTZ - b00264ab
36 37 CDTB - c2330001
출력 텍스트를 다음과 같이 표시하고 싶습니다.
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
하이픈 뒤에 오는 문자열의 경우 2자마다 콜론을 추가해야 합니다.
제가 지시할 수 있는 일반적인 텍스트 처리 명령이 있나요?
- 하이픈 앞(포함)의 모든 문자열은 그대로 유지되어야 합니다.
- 하이픈 다음에 오는 2자마다 콜론을 삽입합니다.
일반적으로 패턴(여기서는 하이픈) 앞과 뒤의 텍스트를 다르게 처리해야 합니다.
지금까지 나의 노력:
sed
나는 및 에 대한 기본 지식을 가지고 있습니다awk
.sed
an 내부에서 수행할 수 있는 방법이 있는 경우 필드 구분 기호로 (하이픈)을awk
설정 하고 on 을 수행한 다음 를 사용하여 전체 줄을 인쇄합니다 .-
awk
sed 's/../&:/g;s/:$//'
$2
print $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