команда sed для замены нескольких строк после интервала

При использованииtrдля избавления от завершающей новой -строки стоит понимать, что она удаляет все вхождения символов, указанных в опции -d. Таким образом, вы можете сделать его немного тоньше :

.

(seq 1 9; echo 0; seq 1 9) | tr -d '\n'

— даже echoбольше не нужно иметь -n.

И для полноты картины :BSD-версия seq, когда указано -s '', не создает новую строку -при выходе.

-1
02.03.2021, 12:14
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
1
18.03.2021, 22:27

Теги

Похожие вопросы