ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как заменить строку в файле в Bash

Bash Heredoc

Как программисту вам может потребоваться работать с разными типами файлов для временного или постоянного хранения данных. Иногда вам может потребоваться заменить часть файла или изменить конкретное содержимое файла. Чтобы заменить содержимое в файле, вы должны найти конкретную строку файла. Команда sed используется для замены любой строки в файле с помощью сценария bash. Эту команду можно использовать различными способами для замены содержимого файла в bash. Команда AWK также может быть использована для замены строки в файле. В этой статье показано, как заменить любое строковое значение из файла с помощью сценария bash. Для отображения операций замены создается текстовый файл с именем Sales.txt со следующим содержимым.

Sales.txt

Date       Amount Area

01/01/2020 60000 AndreyEx
10/02/2020 76000 Maxim
21/03/2020 54000 Destroyer
15/04/2020 78000 Maria

Заменить строку в файле командой `sed`

Базовый синтаксис команды ‘sed’ для замены конкретной строки в файле приведен ниже.

 

Синтаксис

sed -i 's/search_string/replace_string/' filename

 

Каждая часть приведенного выше синтаксиса объясняется ниже.

Параметр ‘-i‘ используется для изменения содержимого исходного файла с заменой строки, если строка поиска существует в файле.

s‘ указывает заменяющую команду.

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

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

filename‘ содержит имя файла, в котором будет применяться поиск и замена.

 

Пример 1: заменить файл командой sed

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

#!/bin/bash

# Присвойте имя файла
filename="Sales.txt"

# Возьмите строку поиска
read -p "Введите строку поиска: " search

# Возьмите строку замены
read -p "Введите строку замены: " replace

if [[ $search != "" && $replace != "" ]]; then
sed -i "s/$search/$replace/" $filename
fi

Пример 2: Замена файла командой sed с флагом g и i

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

#!/bin/bash

# Взять строку поиска
read -p "Введите строку поиска: " search

Взять строку замены
read -p "Введите строку замены: " replace

if [[ $search != "" && $replace != "" ]]; then
sed -i "s/$search/$replace/gi" $1
fi

Пример 3. Замена файла командой sed и шаблоном совпадающих цифр

Следующий сценарий выполнит поиск всего числового содержимого в файле и заменит содержимое, добавив символ «$» в начале чисел.

#!/bin/bash

# Проверить, существует ли значение аргумента командной строки или нет
if [ $1 != "" ]; then
# Поиск по всей строке, содержащей цифры, и добавление $
sed -i 's/\b[0-9]\{5\}\b/$&/g' $1
fi

Заменить строку в файле командой awk

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

 

Пример 4: заменить файл командой awk

Следующий скрипт сохранит обновленное содержимое в файле temp.txt, который будет переименован в исходный файл.

#!/bin/bash

# Проверить, существует ли значение аргумента командной строки или нет
if [ $1 != "" ]; then
# Искать во всей строке по дате
awk '{sub("02/06/2020","12/06/2020")}1' $1 > temp.txt && mv temp.txt $1
fi

Вывод

В этой статье показано, как использовать сценарии bash для замены определенных строк в файле. Задача по замене строки в файле станет для вас проще после отработки приведенных выше примеров.

Exit mobile version