Найти и заменить в сценариях оболочки

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

Ответ 1

Конечно, вы можете сделать это с помощью sed или awk. Пример sed:

sed -i 's/Andrew/James/g' /home/oleksandr/names.txt

Ответ 2

Вы можете использовать sed для выполнения поиска/замены. Обычно я делаю это из оболочки bash script и перемещаю исходный файл, содержащий значения, которые нужно заменить на новое имя, и запускайте sed, записывая вывод в исходное имя файла следующим образом:

#!/bin/bash
mv myfile.txt myfile.txt.in

sed -e 's/PatternToBeReplaced/Replacement/g' myfile.txt.in > myfile.txt.

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

Ответ 3

sed -i 's/variable/replacement/g' *.conf

Ответ 4

Вы можете использовать sed для этого:

sed -i 's/toreplace/yoursetting/' configfile 

sed, вероятно, доступен в любой UNIX-системе. Если вы хотите заменить несколько случаев, вы можете добавить g в команду s:

sed -i 's/toreplace/yoursetting/g' configfile 

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

Ответ 6

filepath="/var/start/system/dir1"
searchstring="test"
replacestring="test01"

i=0; 

for file in $(grep -l -R $searchstring $filepath)
do
  cp $file $file.bak
  sed -e "s/$searchstring/$replacestring/ig" $file > tempfile.tmp
  mv tempfile.tmp $file

  let i++;

  echo "Modified: " $file
done

Ответ 7

Обычно для этого используется инструмент типа awk или sed.

$ sed -i 's/ugly/beautiful/g' /home/bruno/old-friends/sue.txt

Ответ 8

  Не могли бы вы также объяснить команду? также, возможно, дать ссылку что значит sed? и -i и s и g? - Даниил 19 июня в 11:09

К сожалению, у меня нет достаточно представителей, чтобы ответить на ваш комментарий, поэтому я должен сделать это таким образом. Это лучше объяснено в этой теме:

Найти и заменить внутри текстового файла с помощью команды Bash