sed 명령은 간격 후에 여러 줄을 바꿉니다.

sed 명령은 간격 후에 여러 줄을 바꿉니다.

82줄 간격 (예: 83~106행) 마다 첫 번째 문자를 23 C줄로 바꾸고 싶습니다. 또는 을 사용하여 이 작업을 H어떻게 수행할 수 있습니까 ?sedawk

답변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

관련 정보