Замена строкового значения в файле на 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