it-roy-ru.com

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

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

10
Amanada Smith

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

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

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

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

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

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

8
octopusgrabbus
sed -i 's/variable/replacement/g' *.conf
3
embedded.kyle

Вы можете использовать sed, чтобы сделать это: 

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

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

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

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

1
Flashpix
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
1
user68775

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

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