내 원본 텍스트는
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
에서 이를 수행 할 수 있는 방법이 있다면awk
에서-
필드 구분 기호로 (하이픈)을 설정 하고 이를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