LINUX.ORG.RU

Вывод переменной в одну строку

 , ,


0

2

Нужна помощь в реализации скрипта на sh. Задача - есть файл с параметрами следующего формата:

ServerParam1 = [

[[«a=1»],[]],

[[b=2],[]]

]

ServerParam2 = [

[[«c=3»],[]],

[[d=4],[]]

]

Необходимо вывести значение параметра (то что после «=») в одну строку. Т.е. вывод должен быть таким

ServerParam1 = [[[«a=1»],[]],[[b=2],[]]]

ServerParam2 = [[[«c=3»],[]],[[d=4],[]]]

Заранее спасибо!



Последнее исправление: MrCovax (всего исправлений: 1)
Ответ на: комментарий от aol

на сколько я понял, то, что вы мне предлагаете выведет ВСЕ в одну строку. а мне нужно

ServerParam1 = [[[«a=1»],[]],[[b=2],[]]]

ServerParam2 = [[[«c=3»],[]],[[d=4],[]]]

сори, исправил в 1 посте

MrCovax
() автор топика
Ответ на: комментарий от MrCovax

насколько я понял, мусье втихаря подредактировал вопрос, а потом предъявляет к моему ответу :)

aol ★★★★★
()
Ответ на: комментарий от MrCovax

Какое-то специфическое решение, такие вещи желательно писать универсально: подсчёт открытых минус закрытых [] и когда сравнялось, то печатать CR. Ну вот например:

# счетчик открытых [
declare -i open
while read -d ']' l; do
        # убираем переводы строк
        l=${l//$'\n'/}
        # подсчет количества [ минус одно закрытие на цикл
        o=${l//[^[]/}
        open+=${#o}-1
        # вывод с переводом строки, если открытые все закрылись
        echo -n "$l]"
        [[ open -eq 0 ]] && echo
done

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 2)
$ cat test1.txt 
ServerParam1 = [

[[«a=1»],[]],

[[b=2],[]]

]

ServerParam2 = [

[[«c=3»],[]],

[[d=4],[]]

]

$ cat ./test1.sh
#!/bin/bash
#set -x
Param=
newParam=0
newServer=false

func () {

newParam=1
Param=$Param$line

}

while read -r line; do
    
    newServer=false
    
    if echo $line | grep -q Server ; then
        newServer=true
    fi
    
    if [[ $newServer = true ]] && [[ $newParam -eq 1 ]]; then
       
       echo $Param
       
        newParam=0
        Param=
        
        func
        
        else
        
        func
        
    fi
        
done < test1.txt

echo $Param

$ ./test1.sh
ServerParam1 = [[[«a=1»],[]],[[b=2],[]]]
ServerParam2 = [[[«c=3»],[]],[[d=4],[]]]

nerve ★★
()
Ответ на: комментарий от vodz

разве что «grep -q Server» на «grep -q ServerParam» могу предложить заменить, что разумеется не исключает возможности присутствия ServerParam где либо, кроме нужных строк.

nerve ★★
()
Ответ на: комментарий от nerve

разве что «grep -q Server» на «grep -q ServerParam» могу предложить заменить

Ну я намекал, что мой код универсальнее и даже проще. :)

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.