![sed 명령은 간격 후에 여러 줄을 바꿉니다.](https://linux55.com/image/188823/sed%20%EB%AA%85%EB%A0%B9%EC%9D%80%20%EA%B0%84%EA%B2%A9%20%ED%9B%84%EC%97%90%20%EC%97%AC%EB%9F%AC%20%EC%A4%84%EC%9D%84%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
82줄 간격 (예: 83~106행) 마다 첫 번째 문자를 23 C
줄로 바꾸고 싶습니다. 또는 을 사용하여 이 작업을 H
어떻게 수행할 수 있습니까 ?sed
awk
답변1
샘플 파일 생성
lines_per_set=82
sets=3
lines=$(( $lines_per_set * $sets ))
yes CC | head -n "$lines" | nl > file
두 개의 카운터를 초기화하고 카운트다운합니다. 외부 카운터 재설정은 재초기화를 트리거합니다.
awk '
!k {j= 24; k= 82}
j && j-- {sub(/C/,"H")}
k--
' file
카운터가 예약된 공간에 보관되는 위의 GNU sed와 동일한 아이디어입니다.
sed -En '
G
/^[^\n]*\n{1,24}$/s/C/H/
P
/\n{82}/{z;x;d;}
z;H
' file