안녕하세요. 다음과 같은 수천 줄의 텍스트 파일이 있습니다.
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