Какой редактор может вносить изменения в несколько файлов одновременно, не открывая их linux

Обновлено: 21.11.2024

В этой главе мы поймем, как редактор vi работает в Unix. В Unix существует множество способов редактирования файлов. Одним из лучших способов является редактирование файлов с помощью экранного текстового редактора vi. Этот редактор позволяет редактировать строки в контексте с другими строками в файле.

Улучшенная версия редактора vi, которая называется VIM, также стала доступной. Здесь VIM означает Vi IMproved.

vi обычно считается стандартом де-факто в редакторах Unix, потому что -

Обычно он доступен во всех разновидностях системы Unix.

Его реализации очень похожи по всем направлениям.

Для этого требуется очень мало ресурсов.

Он более удобен для пользователя, чем другие редакторы, такие как ed или ex.

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

Запуск редактора vi

В следующей таблице перечислены основные команды для использования редактора vi —

имя файла vi

Создает новый файл, если он еще не существует, иначе открывает существующий файл.

vi-R имя файла

Открывает существующий файл в режиме только для чтения.

просмотреть имя файла

Открывает существующий файл в режиме только для чтения.

Ниже приведен пример создания нового файла testfile, если он еще не существует в текущем рабочем каталоге —

Приведенная выше команда сгенерирует следующий вывод —

Вы заметите тильду (~) в каждой строке после курсора. Тильда обозначает неиспользуемую строку. Если строка не начинается с тильды и кажется пустой, в ней присутствует пробел, табуляция, новая строка или какой-либо другой невидимый символ.

Теперь у вас есть один открытый файл, над которым можно начать работу. Прежде чем двигаться дальше, давайте разберемся с несколькими важными понятиями.

Режимы работы

При работе с редактором vi мы обычно сталкиваемся со следующими двумя режимами —

Командный режим. Этот режим позволяет выполнять административные задачи, такие как сохранение файлов, выполнение команд, перемещение курсора, вырезание (дергание) и вставка строк или слов, а также поиск и замена. В этом режиме все, что вы вводите, интерпретируется как команда.

Режим вставки — этот режим позволяет вставлять текст в файл. Все, что набирается в этом режиме, интерпретируется как ввод и помещается в файл.

vi всегда запускается в командном режиме. Чтобы ввести текст, вы должны быть в режиме вставки, для которого просто введите i. Чтобы выйти из режима вставки, нажмите клавишу Esc, и вы вернетесь в командный режим.

Подсказка. Если вы не уверены, в каком режиме находитесь, дважды нажмите клавишу Esc; это приведет вас в командный режим. Вы открываете файл с помощью редактора vi. Начните с ввода нескольких символов, а затем перейдите в командный режим, чтобы понять разницу.

Выход из vi

Команда для выхода из vi: :q. В командном режиме введите двоеточие и 'q', а затем return. Если ваш файл был каким-либо образом изменен, редактор предупредит вас об этом и не даст выйти. Чтобы проигнорировать это сообщение, выполните команду выхода из vi без сохранения: :q!. Это позволяет выйти из vi без сохранения каких-либо изменений.

Команда для сохранения содержимого редактора: :w. Вы можете комбинировать указанную выше команду с командой quit или использовать :wq и return.

Самый простой способ сохранить изменения и выйти из vi — использовать команду ZZ. Когда вы находитесь в командном режиме, введите ZZ. Команда ZZ работает так же, как и команда :wq.

Если вы хотите указать/указать какое-либо конкретное имя файла, вы можете сделать это, указав его после :w. Например, если вы хотите сохранить файл, над которым вы работали, под другим именем файла, называемым имя_файла2, вы должны ввести :w имя_файла2 и вернуться.

Перемещение внутри файла

Чтобы перемещаться по файлу, не затрагивая текст, вы должны находиться в командном режиме (дважды нажмите клавишу Esc). В следующей таблице перечислены несколько команд, которые вы можете использовать для перемещения по одному символу за раз —

Перемещает курсор вверх на одну строку

Перемещает курсор вниз на одну строку

Перемещает курсор на один символ влево

Перемещает курсор вправо на один символ

Для перемещения по файлу необходимо учитывать следующие моменты:

vi чувствителен к регистру. При использовании команд необходимо обращать внимание на использование заглавных букв.

Большинству команд в vi может предшествовать количество повторений действия. Например, 2j перемещает курсор на две строки вниз от позиции курсора.

Есть много других способов перемещения внутри файла в vi. Помните, что вы должны находиться в командном режиме (дважды нажмите Esc). В следующей таблице перечислены несколько команд для перемещения по файлу —

Ниже приведен список команд для перемещения по файлу.

Помещает курсор в начало строки

Помещает курсор в конец строки

Перемещает курсор к следующему слову

Помещает курсор на предыдущее слово

Помещает курсор в начало текущего предложения

Помещает курсор в начало следующего предложения

Перемещается в конец слова с разделителями-пустотами

Перемещает абзац назад

Перемещает абзац вперед

Перемещает раздел назад

Перемещает раздел вперед

Переходит к столбцу n в текущей строке

Переход к первой строке файла

Переходит к последней строке файла

Переходит на n-ю строку файла

Переходит на n-ю строку файла

Перемещается вперед к c

Возврат к c

Перемещается в верхнюю часть экрана

Перемещается на n-ю строку сверху экрана

Перемещается в центр экрана

Перейти к нижней части экрана

Перемещается на n-ю строку снизу экрана

Двоеточие, за которым следует число, поместит курсор на номер строки, представленный x

Команды управления

С помощью клавиши управления можно использовать следующие команды для выполнения функций, указанных в таблице ниже —

Ниже приведен список команд управления.

Перемещается на 1/2 экрана вперед

Перемещается на один полный экран вперед

Перемещение назад на 1/2 экрана

Перемещается назад на один полный экран

Перемещает экран на одну строку вверх

Перемещает экран на одну строку вниз

Перемещает экран на 1/2 страницы вверх

Перемещает экран на 1/2 страницы вниз

Перемещает экран на одну страницу вверх

Перемещает экран на одну страницу вниз

Перерисовывает экран

Редактирование файлов

Для редактирования файла необходимо находиться в режиме вставки. Есть много способов войти в режим вставки из командного режима —

Вставляет текст перед текущим положением курсора

Вставляет текст в начало текущей строки

Вставляет текст после текущего положения курсора

Вставляет текст в конец текущей строки

Создает новую строку для ввода текста под курсором

Создает новую строку для ввода текста над курсором

Удаление символов

Вот список важных команд, которые можно использовать для удаления символов и строк в открытом файле –

Удаляет символ под курсором

Удаляет символ перед курсором

Удаляет от текущего положения курсора к следующему слову

Удаляет от текущей позиции курсора до начала строки

Удаляет от текущей позиции курсора до конца строки

Удаляет от позиции курсора до конца текущей строки

Удаляет строку, на которой находится курсор

Как упоминалось выше, перед большинством команд в vi можно указать количество повторений действия. Например, 2x удаляет два символа под курсором, а 2dd удаляет две строки, на которых находится курсор.

Рекомендуется попрактиковаться в командах, прежде чем мы продолжим.

Команды изменения

У вас также есть возможность изменять символы, слова или строки в vi, не удаляя их. Вот соответствующие команды —

Удаляет содержимое строки, оставляя вас в режиме вставки.

Изменяет слово, на котором находится курсор, с курсора на строчную букву w в конце слова.

Заменяет символ под курсором. vi возвращается в командный режим после ввода замены.

Перезаписывает несколько символов, начиная с символа, находящегося в данный момент под курсором. Вы должны нажать Esc, чтобы остановить перезапись.

Заменяет текущий символ введенным вами символом. После этого вы остаетесь в режиме вставки.

Удаляет строку, на которой находится курсор, и заменяет ее новым текстом. После ввода нового текста vi остается в режиме вставки.

Команды копирования и вставки

Вы можете скопировать строки или слова из одного места, а затем вставить их в другое место, используя следующие команды –

Копирует текущую строку.

Копирует текущее слово, начиная с символа, на котором стоит курсор w в нижнем регистре, до конца слова.

Помещает скопированный текст после курсора.

Помещает скопированный текст перед курсором.

Дополнительные команды

Есть несколько расширенных команд, которые упрощают повседневное редактирование и позволяют более эффективно использовать vi –

Ниже приведен список расширенных команд.

Соединяет текущую строку со следующей. Несколько команд соединяют несколько строк.

Сдвигает текущую строку вправо на одну ширину сдвига.

Переключает регистр символов под курсором.

Нажмите одновременно клавиши Ctrl и G, чтобы отобразить текущее имя файла и статус.

Восстанавливает текущую строку в состояние, в котором она находилась до того, как курсор вошел в строку.

Это помогает отменить последнее изменение, внесенное в файл. Повторный ввод 'u' повторит изменение.

Соединяет текущую строку со следующей. Счетчик объединяет столько строк.

Отображает текущую позицию в файле в % и имя файла, общее количество файлов.

Переименовывает текущий файл в имя файла.

Записывает в файл имя_файла.

Открывает другой файл с именем файла.

Изменяет текущий рабочий каталог на имя_каталога.

Переключение между двумя открытыми файлами.

Если вы открываете несколько файлов с помощью vi, используйте :n для перехода к следующему файлу в последовательности.

Если вы открываете несколько файлов с помощью vi, используйте :p для перехода к предыдущему файлу в последовательности.

Если вы открываете несколько файлов с помощью vi, используйте :N для перехода к предыдущему файлу в последовательности.

Читает файл и вставляет его после текущей строки.

Читает файл и вставляет его после строки n.

Поиск слов и символов

В редакторе vi предусмотрено два вида поиска: строковый и символьный. Для поиска строки / и ? используются команды. Когда вы запускаете эти команды, только что введенная команда будет отображаться в последней строке экрана, где вы вводите конкретную строку для поиска.

Эти две команды отличаются только направлением поиска —

Команда / выполняет поиск в файле вперед (вниз).

? команда выполняет поиск в файле назад (вверх).

Команды n и N повторяют предыдущую команду поиска в том же или противоположном направлении соответственно. Некоторые символы имеют особое значение. Этим символам должна предшествовать обратная косая черта (\), чтобы они были включены в поисковое выражение.

Выполняет поиск в начале строки (Используйте в начале поискового выражения).

Изначально мы находимся в домашнем каталоге, и это можно проверить с помощью команды pwd . Проверка существующих файлов с помощью команды ls, а затем команда длинного списка (ll) используется для сбора дополнительных сведений о существующих файлах. Как вы можете видеть на рисунке ниже, существующих файлов нет.

Синтаксис сенсорной команды для создания нового файла: вы можете создать один файл за раз, используя сенсорную команду.

Синтаксис:

Созданный файл можно просмотреть с помощью команды ls, а для получения более подробной информации о файле можно использовать команду длинного списка ll или команду ls -l. Здесь файл с именем ‘File1’ создается с помощью сенсорной команды.

Сенсорная команда для создания нескольких файлов: Сенсорная команда может использоваться для одновременного создания нескольких файлов. Эти файлы будут пустыми при создании.

Синтаксис:

Несколько файлов с именами Doc1, Doc2, Doc3 создаются одновременно с помощью сенсорной команды здесь.

параметры сенсорной команды

Как и все другие команды, команда Touch имеет различные параметры. Эти параметры очень полезны для различных целей.

touch -a: Эта команда используется только для изменения времени доступа. Чтобы изменить или обновить время последнего доступа или модификации файла, используется команда touch -a.

Синтаксис:

Здесь команда touch -a изменяет время доступа к файлу с именем Doc1.

touch -c : Эта команда используется для проверки того, создан файл или нет. Если не создано, то не создавайте. Эта команда позволяет избежать создания файлов.

Синтаксис:

touch -c-d : используется для обновления доступа и времени модификации.

Синтаксис:

touch -m : используется только для изменения времени модификации. Обновляется только время последнего изменения.

Синтаксис:

touch -r : эта команда используется для использования временной метки другого файла. Здесь файл Doc2 обновляется с отметкой времени файла 1.

Синтаксис:

touch -t : используется для создания файла в указанное время.

Поиск и замена текста в нескольких файлах одновременно прямо из терминала Linux для повышения эффективности и минимизации ошибок.

Опубликовано: 22 сентября 2021 г. | Роберто Нодзаки (Red Hat, Sudoer)

Подумайте о некоторых ситуациях, когда вам нужно изменить строки в текстовых файлах на хостах Linux.

В зависимости от случая вы просто измените файл прямо в своем любимом текстовом редакторе.

Но что, если файлов слишком много? Слишком много изменений? И вдобавок ко всему, вам нужен более автоматизированный метод для точного выполнения этой задачи таким образом, который также воспроизводим и каким-то образом самодокументируется.

Привлекли ваше внимание? Хорошо, я уточню.

На что следует обратить внимание, прежде чем вносить какие-либо изменения

Дополнительные ресурсы по Linux

Если вы используете интегрированную среду разработки (IDE), возможно, у вас уже есть функция глобального поиска и замены в нескольких файлах. В этом случае у вас будет возможность подтвердить в каждом конкретном случае, какое вхождение следует заменить (если только вы не уверены, что действительно хотите заменить все).

Воспринимайте следующие примеры как способы внесения таких изменений, используя только командную строку, а не интегрированную среду разработки.

Но вы также можете проверить изменения перед их применением, потому что, в отличие от варианта IDE, метод командной строки более немедленный (по умолчанию подтверждение не запрашивается).

В моем примерном сценарии у меня есть три файла, содержащие ссылки на переменные user_name и user_home , которые по какой-то серьезной причине я должен изменить на admin_name и admin_home .

Прежде чем вносить какие-либо изменения, я проверяю вхождения в текущем каталоге:

Хм. Я вижу строку user_ в файлах playbook.yml и vars.yml, но есть и директория. Я могу использовать следующую команду, чтобы включить это в поиск:

Примечание. Поскольку комбинация find и xargs grep не выделяет строку user_, как в первом примере, я добавил дополнительную команду grep, чтобы выделить строку.

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

1. Изменить строки в файлах в том же каталоге

Если бы я хотел изменить только строки в файлах в текущем каталоге, я мог бы использовать:

Здесь я использовал команду sed с аргументом -i, чтобы внести изменения на месте. /g в конце параметра означает заменить все вхождения в каждом файле.

2. Изменить строки в файлах в текущем и подкаталогах

В моем примерном сценарии есть файлы в подкаталогах, которые также необходимо изменить. Для этого я снова использую команду find:

В этом случае я использую команду find с параметром -type f, чтобы возвращать только файлы, а не имена каталогов. Команда xargs получит каждое имя файла, возвращенное командой find, и применит команду sed.

Подведение итогов

Если вы точно знаете, что вам нужно изменить, и имеете дело со строкой, которую можно безопасно заменить другой, вы можете ускорить процесс, используя показанные здесь команды.

Будьте особенно осторожны со строками, которые могут быть общими в ваших файлах: если вы применяете глобальное изменение, которое затрагивает больше, чем вы предполагали, вам, возможно, придется вернуться к своим резервным копиям (которые у вас наверняка есть, верно?).

сначала вызывает файл1. После того, как вы закончите редактирование первого файла, команда ex :w записывает (сохраняет) файл1 и вызывает :n в следующем файле ( файл2 ).

Предположим, вы хотите отредактировать два файла: попрактиковаться и записать . Нажатия клавишРезультаты vi практическое примечание

С помощью экранного редактора вы можете прокручивать страницу, перемещать курсор, удалять строки, вставлять символы и т. д. при просмотре

Откройте два файла с практикой и примечанием. На вашем экране появится файл с первым именем, практика. Внесите любые изменения.

"практика" 6 строк 328 символов

Сохраните отредактированный файл с помощью команды ex w . Нажмите ВОЗВРАТ.

Дорогой мистер Хеншоу: Спасибо за подсказку. . .

Вызовите следующий файл, обратите внимание, с помощью команды ex n . Нажмите ВОЗВРАТ. Внесите любые изменения.

Сохраните второй файл, отметьте , и завершите сеанс редактирования.

Предположим, вы редактируете файл практики и хотите отредактировать букву файла, а затем вернуться к практике. Нажатия клавишРезультаты :w

"практика" 6 строк 328 символов

Сохраните упражнение, нажав w, и нажмите RETURN. практика сохраняется и остается на экране. Теперь вы можете переключиться на другой файл, поскольку ваши изменения сохранены.

"письмо" 23 строки 1344 символа

Назовите букву файла буквой e и нажмите RETURN. Внесите любые изменения.

Если вы не сохранили текущий файл, vi не позволит вам переключать файлы с помощью :e или :n, пока вы не прикажете сделать это в обязательном порядке, добавив восклицательный знак после команды.

также полезно. Он отменяет ваши изменения и возвращается к последней сохраненной версии текущего файла.

Поскольку % обозначает текущее имя файла, предыдущая строка также могла быть напечатана:

В следующем примере показано, как перенести текст из одного файла в другой.

Нажатия клавишРезультаты "f4yy

С помощью экранного редактора вы можете прокручивать страницу, перемещать курсор, удалять строки, вставлять символы и т. д., наблюдая за результатами изменений по мере их внесения

Восстановить четыре строки в буфер f.

"практика" 6 строк 238 символов

Уважаемый мистер Хеншоу! Я подумал, что вам будет интересно узнать следующее: С уважением,

Введите букву файла с помощью :e . Переместите курсор туда, где будет размещен скопированный текст.

Уважаемый мистер Хеншоу! Я подумал, что вам будет интересно узнать, что: с помощью экранного редактора вы можете прокручивать страницу, перемещать курсор, удалять строки, вставлять символы и т. д., видя при этом результаты. правок по мере их внесения С уважением,

Поместите скопированный текст из именованного буфера f под курсором.

Еще один способ переместить текст из одного файла в другой — использовать команды ex :ya (выдернуть) и :pu (поместить). Эти команды работают так же, как эквивалентные команды vi y и p, но они используются с возможностью адресации строк ex и именованными буферами. Например:

выдернет (скопирует) строки с 160 по 224 в буфер a. Затем вы должны перейти с помощью :e к файлу, в который вы хотите поместить эти строки. Поместите курсор на строку, где вы хотите поместить перетянутые линии. Затем введите:

Читайте также: