Команда sed для замены строки в файле

Sed Command Replace String File



Когда мы работаем с файлами любого типа, очень распространенной практикой является внесение изменений в эти файлы путем поиска и замены слов. Большинство текстовых редакторов предоставляют различные методы, основанные на графическом интерфейсе пользователя, для выполнения этих изменений. Однако иногда вам нужен способ найти и заменить слова в файле через терминал. Поэтому в этой статье мы познакомим вас с методом использования команды sed для замены строки в текстовом файле. Мы также расскажем о различных сценариях использования этой команды.

Примечание. Мы будем использовать Linux Mint 20 для демонстрации использования команды sed для замены строки в файле. Вы также можете использовать любой другой вариант Linux, если хотите.







Использование команды sed:

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



Создание текстового файла для демонстрации:

Чтобы продемонстрировать использование команды sed, мы хотели бы работать с текстовым файлом. Однако вы даже можете создать файл Bash или любой другой файл по вашему выбору. Во-вторых, мы создадим файл в домашнем каталоге, чтобы нам не приходилось указывать какие-либо сложные пути при доступе к этому файлу. Для создания текстового файла необходимо выполнить следующие шаги:



Щелкните значок диспетчера файлов, расположенный на панели задач Linux Mint 20:





Теперь создайте новый текстовый файл в домашнем каталоге, щелкнув правой кнопкой мыши в любом месте, а затем выбрав параметр «Новый документ» в каскадном меню и параметр «Пустой документ» во вложенном каскадном меню. После создания текстового файла дайте ему подходящее имя. В этом конкретном примере я назвал его sed.txt.



Дважды щелкните этот файл, чтобы открыть его, и введите в него произвольный текст, как показано на изображении ниже. Сохраните этот текстовый файл, нажав Ctrl + S, а затем закройте его.

Теперь запустите терминал в Linux Mint 20, как показано на следующем изображении:

После запуска терминала в Linux Mint 20 вы можете просмотреть все примеры, упомянутые ниже, один за другим.

Использование команды sed для замены всех вхождений данного слова:

Вы можете использовать команду sed для замены всех вхождений данного слова в текстовом файле. Синтаксис достижения этой цели упомянут ниже:

$sed‘S/sed/FindWord/ReplaceWord/’File.txt

Здесь вам нужно заменить FindWord словом, которое вы хотите заменить, и ReplaceWord словом, которое нужно заменить. Более того, вам также необходимо заменить файл именем файла, в котором вы хотите произвести эти замены. В этом сценарии я заменил FindWord на sed и ReplaceWord на replace. Имя нашего файла - sed.txt. Это также показано на следующем изображении:

Успешное выполнение этой команды покажет вам изменения, которые произошли из-за запуска этой команды на вашем терминале:

Использование команды sed для замены n-го вхождения данного слова в каждой строке:

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

$sed‘S/FindWord/ReplaceWord/num ’file.txt

Здесь вам нужно заменить FindWord словом, которое вы хотите заменить, и ReplaceWord словом, которое нужно заменить. Более того, вам также необходимо заменить файл именем файла, в котором вы хотите произвести эти замены. В этом сценарии я заменил FindWord replace и ReplaceWord на sed. Имя нашего файла - sed.txt. Кроме того, число относится к вхождению или позиции слова, которое нужно заменить. В продемонстрированном примере я хочу заменить первое вхождение replace на sed в каждой строке, как показано на изображении ниже:

Успешное выполнение этой команды покажет вам изменения, которые произошли из-за запуска этой команды на вашем терминале:

Использование команды sed для замены данного слова в определенной строке:

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

$sed‘LineNum s/FindWord/ReplaceWord/’File.txt

Здесь вам нужно заменить FindWord словом, которое вы хотите заменить, и ReplaceWord словом, которое нужно заменить. Более того, вам также необходимо заменить файл именем файла, в котором вы хотите произвести эти замены. В этом сценарии я заменил FindWord sed и ReplaceWord на replace. Имя нашего файла - sed.txt. Кроме того, вам необходимо заменить LineNum на номер конкретной строки, в которой вы хотите произвести замену. В этом примере мы хотели заменить sed на replace в строке номер 2 нашего файла, как показано на следующем изображении:

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

Заключение:

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