При использованииtr
для избавления от завершающей новой -строки стоит понимать, что она удаляет все вхождения символов, указанных в опции -d
. Таким образом, вы можете сделать его немного тоньше :
.
(seq 1 9; echo 0; seq 1 9) | tr -d '\n'
— даже echo
больше не нужно иметь -n
.
И для полноты картины :BSD-версия seq
, когда указано -s ''
, не создает новую строку -при выходе.
Создать образец файла
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