Как заменить одно и то же слово из файла конфигурации на другие слова из массива - PullRequest
1 голос
/ 04 июля 2019

Привет.

Я очень новичок в Shell Script, поэтому мне нужна ваша помощь ...

У меня есть файл конфигурации с информацией ниже

    config name AAAAA
    root root
    port number 00000
    Hostname hahahahah

    config name AAAAA
    root less
    port number 00001
    Hostname nonononono

    config name AAAAA
    root less
    port number 00002
    Hostname nonononono

А внутри моего bash-файла есть архив с информацией ниже

${array1[0]} # Has value of value11111
${array2[1]} # Has value of value22222
${array2[1]} # Has value of value33333

Я хочу изменить конфигурационный файл и сохранить как показано ниже

    config name <b>value11111</b>
    root root
    port number 00000
    Hostname hahahahah

    config name <b>value22222</b>
    root less
    port number 00001
    Hostname nonononono

    config name <b>value33333</b>
    root less
    port number 00002
    Hostname nonononono

Я пробовал awk и sed, но не повезло ..... Не могли бы вы помочь с этим?

1 Ответ

0 голосов
/ 05 июля 2019

Проверьте из этих ответов.

Я поддерживаю совет Эда и Дэвида (и задним числом, весь этот пост мог бы быть комментарием, а не ответом), что awk / sed может быть не лучшим инструментом для этой работы, и вы захотите сделать шаг назад и переосмыслить процесс. Есть целая куча вещей, которые могут пойти не так; значения массива могут быть заполнены неправильно, нет проверки, что существует достаточно значений для всех подстановок, и, в конце концов, вы не можете откатить изменения обратно.

Тем не менее, вот отправная точка, просто чтобы проиллюстрировать некоторые sed. Он, конечно, не самый производительный и работает только для GNU sed, но обеспечивает требуемый вывод

#!/bin/bash

declare -a array
array=(value11111 value22222 value33333)

for a in "${array[@]}"; do
    # Use sed inline, perform substitutions directly on the file
    # Starting from the first line, search for the first match of `config name AAAAA`
    #   and then execute the substitution in curly brackets
    sed -i "0,/config name AAAAA/{s/config name AAAAA/config name $a/}" yourinputconfigfile
done
# yourinputconfigfile

    config name value11111
    root root
    port number 00000
    Hostname hahahahah

    config name value22222
    root less
    port number 00001
    Hostname nonononono

    config name value33333
    root less
    port number 00002
    Hostname nonononono
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...