Замена строкового значения в файле на Bash в Linux

Пример:

sed -i 's/old-text/new-text/gi' input.txt

-i — атрибутом обозначается, что изменяется содержимое исходного файла где найдена строка на строку замены

s — в начале указывает на команду замены

old-text — строка которую ищем

new-text — строка на которую заменяем

g — заменяем все найденные (без данного параметра будет заменен только первый найденный)

i — не обращаем внимания на регистр

input.txt — путь к файло где производим замену

 

Пример сохранения результата в другой файл:

sed 's/word1/word2/g' input.file > output.file

 

Искать несколько значений:

sed -i -e 's/word1/word2/g' -e 's/xx/yy/g' input.file

 

Преобразовать файлы рекурсивно в текущей папке из CRLF (DOS) в LF (Linux) — удалить ^M:

find . -type f -print0 | xargs -0 sed -i $'s/\r$//'

Преобразовать файлы рекурсивно в текущей папке из LF (Linux) в CRLF (DOS):

find . -type f -print0 | xargs -0 sed -i $'s/$/\r/'

 

Пример bash скрипта которому задается путь к файлу, строку котору ищем, строку на которую заменяем:

#!/bin/bash

# Assign the filename
filename="Sales.txt"

# Take the search string
read -p "Enter the search string: " search

# Take the replace string
read -p "Enter the replace string: " replace

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

Для поиска: linux regular bash, регулярное, regex, замена в файлах, crlf to lf