좌표 범위를 기준으로 문자 바꾸기

좌표 범위를 기준으로 문자 바꾸기

안녕하세요. 다음과 같은 수천 줄의 텍스트 파일이 있습니다.

NNNNN
NNNNN
NNNNN
NNNNN

특정 범위의 모든 문자를 위치 좌표를 기반으로 하는 다른 문자로 바꾸고 싶습니다. 범위 위치 10에서 위치 13까지의 모든 N 문자를 문자 P로 바꾸려고 한다고 가정해 보겠습니다. 출력은 다음과 같습니다.

NNNNN
NNNNP
PPPNN
NNNNN

사용할 수 있는 명령에 대한 제안 사항이 있나요?

답변1

$ tr -d '\n' <file | perl -pe 'substr($_, 9, 4, "P"x4)' | fold -w 5
NNNNN
NNNNP
PPPNN
NNNNN

먼저 입력 파일의 데이터에서 모든 줄 바꿈을 제거한 다음 substr()오프셋 9에서 길이 4의 텍스트를 Perl에서 대문자로 바꿉니다 P. 그런 다음 이 fold유틸리티를 사용하여 줄을 5자로 축소합니다. 출력 끝에 개행 문자가 없습니다.

답변2

다음은 짧은 쉘 스크립트입니다:

#!/bin/bash
start=10
end=13
first=$(head -n 1 file)
width=${#first}
text=$(paste -sd "" file)
mod="${text:0:start-1}$(tr N P <<<"${text:start:end-start+1}")${text:end}"
grep -Eo ".{1,$width}" <<<"$mod"
NNNNN
NNNNP
PPPNN
NNNNN

관련 정보