Изменение содержимого файла через оболочку 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
Эта команда также может быть использована для изменения данных.