Используйте ex
, указанный POSIX файловый редактор (и невизуальную форму vi
).
printf '%s\n' '/This is a unique line' '.,/Common/copy -' %p | ex file.txt
Это распечатывает измененное содержимое файла, но не сохраняет изменения.
Вот команда для сохранения изменений:
printf '%s\n' '/This is a unique line' '.,/Common/copy -' x | ex file.txt
В отличие от Awk и Sed, ex
не ограничивается только измененными строками по порядку. Скорее, он может работать со всем буфером, а не только вперед.
Первая команда /Это уникальная строка
— это просто команда движения. Он перемещает курсор на первую строку файла, содержащую Это уникальная строка
.
Следующая команда — это команда copy
. Он работает с диапазоном адресов от текущей строки (.
) до следующей строки оттуда, соответствующей Common
, и копирует их в строку, предшествующую текущей строке (-
).
Обновление: для модификации после копирования давайте сначала отметим строку, с которой мы начали. Первая копируемая строка будет отмечена буквой «b», а строка перед ней будет отмечена буквой «a». Затем скопированные строки будут помещены между 'a и 'b, и мы сможем использовать их в адресах для наших "замещающих" команд. Кстати, t
является синонимом copy
.
printf "/Here is a unique line
kb
-ka
.,/Common/t 'a
'a+,'b-s/unique/changed/g
'a+,'b-s/some/different/g
x
" | ex file.txt
Хорошо, у меня работало обновление / установка ядра и всех модулей ядра X.
После этого в / usr / src / kernels /