Скрипты команд Linux для изменения данных в файлах

У меня есть ряд устройств, к которым мне нужно подключиться по SSH, изменить некоторые файлы, изменив имя устройства и сетевые настройки.

Файлы содержат такие данные, как:

NETWORK_ETH1_CLIENTIP_LIST='10.47.19.182'

HOSTNAME="c50"

Я использую шпатлевку для входа в систему по ssh, а затем использую nano для изменения каждого файла.

Я считаю, что было бы легко написать сценарий, но я не слишком уверен в командах Linux для того, что я хотел бы сделать.

Есть ли в Linux команды, которые я мог бы использовать для поиска строк в указанном текстовом файле, например «HOSTNAME» и заменить найденную строку новым HOSTNAME?

В настоящее время я использую plink для некоторых более простых системных проверок, которые я вызываю из пакетных файлов:

plink.exe -pw PASSWORD [email protected] -m Commands/SystemChecks.txt

Имя пользователя и пароль были опущены. SystemChecks содержит некоторые базовые таблицы поиска, команды ping и т. д., чтобы проверить, было ли устройство успешно изменено.

Мне нужна помощь, чтобы выяснить, как найти и заменить данные (имя хоста, IP-адрес, сетевые маски и т. д.) с помощью команд Linux.


person cheeseman    schedule 23.01.2013    source источник


Ответы (2)


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

target='/path/to/target_file'
sed -i "/HOSTNAME/d" $target
echo "HOSTNAME=\"newhostname\"" >> $target
person Chris Montanaro    schedule 23.01.2013

echo 'HOSTNAME="c50"' | sed 's/HOSTNAME="c50"/HOSTNAME="c60"/g'

Используя команду sed, вы можете легко добиться подстановки.

Предположим, у вас есть файл с именем file.conf, и в нем есть следующее содержимое:

NETWORK_ETH1_CLIENTIP_LIST='10.47.19.182'
HOSTNAME="c50"

Итак, если вы хотите изменить значение HOSTNAME="c50" на HOSTNAME="d10000", вы можете использовать sed следующим образом:

sed -i 's/HOSTNAME="c50"/HOSTNAME="d10000"/g' file.conf
person Suku    schedule 23.01.2013
comment
Есть ли способ сделать это, не зная предыдущего имени устройства / IP-адреса и т. д.? - person cheeseman; 23.01.2013