ed: установить первую строку как текущую строку по умолчанию

ed: установить первую строку как текущую строку по умолчанию

Я пытаюсь использовать edдля редактирования первой строки большого файла, но мне приходится ждать, edпока не будут прочитаны все строки. Есть ли способ остановить edчтение всего файла и начать редактирование немедленно, при этом текущая строка будет первой?

решение1

Как отметил shellter, edэтого сделать нельзя. Большинство операций редактирования требуют перезаписи файла, на месте можно делать только замены, в этом случае можно использовать hexedit(1).

Наименее требовательный к памяти способ — это использование sedопераций, например, заменаАвгустсИюньв первой строке:

sed '1s/August/June/' FILE > NEWFILE

решение2

Невозможно остановить edчтение всего файла или автоматически сделать первую строку буфера редактирования текущей строкой после открытия документа в редакторе.

Редактор edвсегда помещает вас на последнюю строку, затронутую командой (или сразу после или до команды d), а чтение файла при запуске похоже на использование e filename, которое сбрасывает текущий буфер редактирования, открывает указанный файл для редактирования и устанавливает текущей строку на последнюю строку, считанную из файла.

Если вы хотите внести изменения в большой документ неинтерактивным способом, то использование sedили awkможет оказаться более удачной альтернативой, поскольку эти инструменты работают в потоках и по умолчанию не считывают весь документ в память.

Если вы действительно хотите интерактивно редактировать большие документы, вы можете попробовать разбить документ на части с помощью split, отредактировать те части, которые вы хотите изменить (используя edили , viили любой другой редактор), а затем просто catобъединить части вместе с помощью .


Гипотетический сеанс редактирования первых 5 строк огромного файла в формате ed:

$ред
e ! head -n 5 огромный файл
123
г/^/м0
w! {cat -;tail -n +6 огромныйфайл;} >огромныйфайл.новый
В

То есть запрос на редактирование вывода head -n 5 hugefile. Редактирование, которое я здесь выполняю, заключается в том, чтобы просто перевернуть строки ( g/^/m0, "переместить каждую строку по очереди в положение перед первой строкой"). Затем записываю измененный буфер редактирования в команду оболочки, которая объединяет содержимое буфера со строкой 6 и далее от исходного файла. Результат записывается в файл с новым именем. Qзатем выходит из редактора.

Связанный контент