URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5673
[ Назад ]

Исходное сообщение
"sed grep. Без расширений GNU."

Отправлено regunkov , 29-Авг-06 11:51 
Пишу скрипт который будет работать в busybox, шелл ash, sed, grep и прочие утилиты имеют минимальный набор опций (как то, у grep нет опции -o).

Есть строка формата $(cat /proc/cmdline)

#!/bin/sh
name="myopt=par1,par2 opt1=par11,par22,par23  myopt=par3,par4 myopt=par5"
echo -E "$name" | sed -n -e 's/\(^\| \)myopt=\([^ ]*\)/(\2)/g;p'

результат
(par1,par2) opt1=par11,par22,par23 (par3,par4)(par5)

хочу получить значения в скобках через символ в $IFS.

Вот моё решение, но оно не универсально, и по-моему, некрасиво. Хочу простого!

#!/bin/sh
name="myopt=par1,par2 opt1=par11,par22,par23  myopt=par3,par4 myopt=par5"

name="x $name x"

echo -E "$name" |
sed -n -e 's/ myopt=[^ ]*/\n&\n/gp' |
grep -e '^ myopt=' |
sed -n -e 's/^ myopt=//;s/,/ /g;p'

результат
par1 par2
par3 par4
par5

PS. awk нет (т.к. весит он много) да и не знаю я его.


Содержание

Сообщения в этом обсуждении
"sed grep. Без расширений GNU."
Отправлено mail , 30-Авг-06 09:21 
я делал тоже самое для терминалок по смыслу
но сделал так:
for i in `cat /proc/cmdline`; do
    export $i
done

в ash работает, единственно косяк будет если параметр один а не один=два,
но у меня таких нет.


"sed grep. Без расширений GNU."
Отправлено mail , 30-Авг-06 09:23 
>я делал тоже самое для терминалок по смыслу
>но сделал так:
>for i in `cat /proc/cmdline`; do
>    export $i
>done
>
>в ash работает, единственно косяк будет если параметр один а не один=два,
>
>но у меня таких нет.


ну или добавить еще дополнительно проверку можно и присвоить по умолчанию 1


"sed grep. Без расширений GNU."
Отправлено regunkov , 30-Авг-06 21:29 
>>я делал тоже самое для терминалок по смыслу
>>но сделал так:
>>for i in `cat /proc/cmdline`; do
>>    export $i
>>done
>>
>>в ash работает, единственно косяк будет если параметр один а не один=два,
>>
>>но у меня таких нет.
>
>
>ну или добавить еще дополнительно проверку можно и присвоить по умолчанию 1
>

Респект за идею!
Честно очено понравилось.

Но меня интересовало не сколько решение, сколько возможность сделать это sed'ом но проще и надёжнее. И такие исключительные ситуации как символ перевода строки внутри значения параметра пробел и имя параметра, который я использую. Хотя для /proc/cmdline это не актуально.