Как программисту вам может потребоваться работать с разными типами файлов для временного или постоянного хранения данных. Иногда вам может потребоваться заменить часть файла или изменить конкретное содержимое файла. Чтобы заменить содержимое в файле, вы должны найти конкретную строку файла. Команда 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 -i 's/search_string/replace_string/' filename
Каждая часть приведенного выше синтаксиса объясняется ниже.
Параметр ‘-i‘ используется для изменения содержимого исходного файла с заменой строки, если строка поиска существует в файле.
‘s‘ указывает заменяющую команду.
search_string содержит строковое значение, которое будет искать в файле для замены.
replace_string содержит строковое значение, которое будет использоваться для замены содержимого файла, соответствующего значению search_string .
‘filename‘ содержит имя файла, в котором будет применяться поиск и замена.
В следующем скрипте текст для поиска и замены будет взят у пользователя. Если строка поиска существует в Sales.txt, она будет заменена строкой замены. Здесь будет выполняться поиск с учетом регистра.
#!/bin/bash # Присвойте имя файла filename="Sales.txt" # Возьмите строку поиска read -p "Введите строку поиска: " search # Возьмите строку замены read -p "Введите строку замены: " replace if [[ $search != "" && $replace != "" ]]; then sed -i "s/$search/$replace/" $filename fi
Следующий сценарий будет работать так же, как и предыдущий пример, но в строке поиска будет производиться глобальный поиск флага «g», а поиск без учета регистра будет выполняться для флага «i».
#!/bin/bash # Взять строку поиска read -p "Введите строку поиска: " search Взять строку замены read -p "Введите строку замены: " replace if [[ $search != "" && $replace != "" ]]; then sed -i "s/$search/$replace/gi" $1 fi
Следующий сценарий выполнит поиск всего числового содержимого в файле и заменит содержимое, добавив символ «$» в начале чисел.
#!/bin/bash # Проверить, существует ли значение аргумента командной строки или нет if [ $1 != "" ]; then # Поиск по всей строке, содержащей цифры, и добавление $ sed -i 's/\b[0-9]\{5\}\b/$&/g' $1 fi
Команда awk — это еще один способ заменить строку в файле, но эта команда не может обновить исходный файл напрямую, как команда sed.
Следующий скрипт сохранит обновленное содержимое в файле 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 для замены определенных строк в файле. Задача по замене строки в файле станет для вас проще после отработки приведенных выше примеров.