The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"sed grep. Без расширений GNU."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"sed grep. Без расширений GNU."  
Сообщение от regunkov (ok) on 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 нет (т.к. весит он много) да и не знаю я его.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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


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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру