Пишу скрипт который будет работать в 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
par5PS. awk нет (т.к. весит он много) да и не знаю я его.
я делал тоже самое для терминалок по смыслу
но сделал так:
for i in `cat /proc/cmdline`; do
export $i
doneв ash работает, единственно косяк будет если параметр один а не один=два,
но у меня таких нет.
>я делал тоже самое для терминалок по смыслу
>но сделал так:
>for i in `cat /proc/cmdline`; do
> export $i
>done
>
>в ash работает, единственно косяк будет если параметр один а не один=два,
>
>но у меня таких нет.
ну или добавить еще дополнительно проверку можно и присвоить по умолчанию 1
>>я делал тоже самое для терминалок по смыслу
>>но сделал так:
>>for i in `cat /proc/cmdline`; do
>> export $i
>>done
>>
>>в ash работает, единственно косяк будет если параметр один а не один=два,
>>
>>но у меня таких нет.
>
>
>ну или добавить еще дополнительно проверку можно и присвоить по умолчанию 1
>Респект за идею!
Честно очено понравилось.Но меня интересовало не сколько решение, сколько возможность сделать это sed'ом но проще и надёжнее. И такие исключительные ситуации как символ перевода строки внутри значения параметра пробел и имя параметра, который я использую. Хотя для /proc/cmdline это не актуально.