У меня есть один файл конфигурации с некоторыми переменными, например, ниже, но моя команда читает только значение переменной, я не могу прочитать все значения в файле конфигурации. Кажется только чтение значений с числами. Какой лучший способ прочитать все возможные типы значений?

sed -n '/^SENDER=\([*]*\)$/s//\1/p' "Config_file" 

cONFIG_FILE:

# Some text
LOGLEVEL=1

# Some text
THRESHOLD=0

# Some text
SAVERULES=0

# Some text
LINESTOSEARCH=1000000

# Some text
HTDOCSFOLDER=/var/www/

# Some text
LOG=/var/log/access.log

# Some text
SENDER=xpto@xpto.bar

1 ответ1

3

/^SENDER=\([*]*\)$/s//\1/p

[*]

Что это за синтаксис? Любой символ есть . в регулярных выражениях.

$ sed -n '/^SENDER=\(.*\)$/s//\1/p' <<< SENDER=xpto@xpto.bar
xpto@xpto.bar

Но я сомневаюсь, что вы выбрали правильный способ делать то, что делаете. Зачем тебе это нужно? Скорее всего, было бы намного лучше прочитать всю конфигурацию в массиве.

#!/bin/bash

readconfig() {
    local ARRAY="$1"
    local KEY VALUE 
    local IFS='='
    declare -g -A "$ARRAY"
    while read; do
        # here assumed that comments may not be indented
        [[ $REPLY == [^#]*[^$IFS]${IFS}[^$IFS]* ]] && {
            read KEY VALUE <<< "$REPLY"
            [[ -n $KEY ]] || continue
            eval "$ARRAY[$KEY]=\"\$VALUE\""
        }
    done 
}

readconfig MYCONFIG < "Config_file"

echo ${MYCONFIG[SENDER]}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .