Изменение содержимого файла через оболочку script

У меня есть требование, когда мне нужно изменить содержимое файла, скажем, xyz.cfg. файл содержит такие значения, как:

group address=127.8.8.8
port=7845
Jboss username=xyz_ITR3

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

group address=127.8.7.7  
port=7822
Jboss username=xyz_ITR4

Как я могу достичь этого, используя оболочку script, используя ввод пользователя или иначе?

Ответ 1

Как насчет чего-то типа:

#!/bin/bash

addr=$1
port=$2
user=$3

sed -i -e "s/\(address=\).*/\1$1/" \
-e "s/\(port=\).*/\1$2/" \
-e "s/\(username=\).*/\1$3/" xyz.cfg

Где $1,$2 и $3 - аргументы, переданные в script. Сохраните файл, например script.sh, и убедитесь, что он выполним с помощью chmod +x script.sh, затем вы можете запустить его, как:

$ ./script.sh 127.8.7.7 7822 xyz_ITR4

$ cat xyz.cfg
group address=127.8.7.7
port=7822
Jboss username=xyz_ITR4

Это дает вам базовую структуру, однако вы бы хотели подумать о проверке входного ect.

Ответ 2

*

#! /bin/sh
file=xyz.cfg
addr=$1
port=$2
username=$3
sed -i 's/address=.*/address='$addr'/' $file
sed -i 's/port=.*/port='$port'/' $file
sed -i 's/username=.*/username='$username'/' $file

*

Я надеюсь, что это будет проще понять для новичков

Ответ 3

sed -i 's/something/other/g' filename.txt 

Будет редактировать файл filename.txt на месте и сменить слово "что-то" на "другое"

Я думаю, что -i может быть расширением GNU, но если он подходит для вас, вы можете добавить его через find, xargs и т.д.

Если вы хотите изменить его в оболочке script, вы можете принимать аргументы в командной строке и ссылаться на них по номеру, например $1

Edit:

В соответствии с моим комментарием, sudo_O ответ ниже - это именно тот пример, который вы хотите. Что я добавлю, так это то, что вам нужно делать такие совпадения с несколькими файлами, охватывая подкаталоги и т.д., Так что узнайте find/xargs, и вы можете объединить их. Простой пример того, что изменение подсети в связке файлов .cfg может быть:

find -name '*.cfg' -print0 | xargs -0 -I {} sed -ie 's/\(192.168\)\.1/\1\.7/' {}

Обратите внимание на аргументы -print0/-0 args, чтобы найти /xargs (очень полезно для путей/имен файлов с пробелами), и что вам нужно избегать захватных скобок из-за оболочки (то же самое в примере sudo)

Ответ 4

sed -i "s/$name/$new_name/g" address.txt

Эта команда также может быть использована для изменения данных.