Автор Тема: Задачка по обработке текста  (Прочитано 5704 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн rjhdby

  • Постоялец
  • ***
  • Сообщений: 432
  • Рейтинг: 3
  • Пол: Мужской
    • rjhdby
    • Просмотр профиля
Задачка по обработке текста
« : 01 августа 2011, 12:28:34 »
вывод ps -ef

    root 24742  1066  0  Jul 29  ?         0:00 /sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
     bin 17326 17322  0  Jul 26  ?         0:00 /opt/OV/httpd//bin/httpd -k start
    root 24814  1066  0  Jul 29  ?         0:00 /sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
    root 24785  1066  0  Jul 29  ?         0:00 /sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
    root 24423  1066  0  Jul 29  ?         0:00 /sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
  oracle  2134     1  0  Oct 21  ?        13:55 /oracle/product/current/bin/tnslsnr LISTENER -inherit
    root   985   978  0  Jul 29  ?         0:41 /opt/OV/bin/OpC/opcuiwww
    root 24821 24814  0  Jul 29  ?         0:11 /opt/OV/bin/OpC/opcuiwww
    root 21703 21702  1 13:20:00 ?         0:00 /opt/wbem/bin/cimprovider -l -s
    root 21659  1848  0 13:20:00 ?         0:00 sh -c   /etc/opt/resmon/lbin/mon_EMSHAProvider_state.sh
    root 21660  1848  1 13:20:00 ?         0:00 sh -c    /opt/sfm/bin/restart_sfm.sh
Соответственно надо вытащить отсюда все процессы рута с путями и аргументами.
Может кто предложит красивое решение? :]

PS В итоге недо получить вот это
/sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
/sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
/sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
/sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
/opt/OV/bin/OpC/opcuiwww
/opt/OV/bin/OpC/opcuiwww
/opt/wbem/bin/cimprovider -l -s
sh -c   /etc/opt/resmon/lbin/mon_EMSHAProvider_state.sh
sh -c    /opt/sfm/bin/restart_sfm.sh

Еще пара ограничений
1) только posix
2) операционки разные(hpus, aix, solaris, linux'ы), соответственно абсолютная позиция первого нужного символа может меняться(предполагаю)
« Последнее редактирование: 01 августа 2011, 13:09:34 от rjhdby »
А вот тут можно посмотреть картины моей супруги http://sevil.pro

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Задачка для awk
« Ответ #1 : 01 августа 2011, 12:36:48 »
ps ax -u root -U root -o args
так не?
Not as ultimate as 42, but pretty close...

Оффлайн rjhdby

  • Постоялец
  • ***
  • Сообщений: 432
  • Рейтинг: 3
  • Пол: Мужской
    • rjhdby
    • Просмотр профиля
Re: Задачка для awk
« Ответ #2 : 01 августа 2011, 12:40:38 »
Дописал.

К сожалению не прокатит
Цитировать
           -U uidlist     (UNIX Standard Only, see standards(5)) Select
                          processes whose real user ID numbers or login
                          names are given in uidlist.  (see
                          usergroupname(5)).
           -o format      (UNIX Standard Only, see standards(5)) format is a
                          comma- or space-separated list of the columns to
                          display, in the order they should be displayed.
                          (Valid column names are listed below.) A column

А вот тут можно посмотреть картины моей супруги http://sevil.pro

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Задачка для awk
« Ответ #3 : 01 августа 2011, 12:59:41 »
rjhdby, -o есть в POSIX, я недавно пересматривал IEEE Std 1003.1
Not as ultimate as 42, but pretty close...

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Задачка для awk
« Ответ #4 : 01 августа 2011, 13:03:24 »
Через awk попробуй так
ps -ef|grep root|grep -v grep |awk '{ for(i=8;i<=NF;i++) printf("%s ",$i);   printf("\n")  }'
Not as ultimate as 42, but pretty close...

Оффлайн rjhdby

  • Постоялец
  • ***
  • Сообщений: 432
  • Рейтинг: 3
  • Пол: Мужской
    • rjhdby
    • Просмотр профиля
Re: Задачка для awk
« Ответ #5 : 01 августа 2011, 13:04:00 »
rjhdby, -o есть в POSIX, я недавно пересматривал IEEE Std 1003.1
Не спорю, но особенности реализации ps на hpux требуют, к сожалению, выставления окружения, чтоб оно заработало. :[
export UNIX95=true
Сам пока вот так накракозябил
ps -fu $USER | sed 's/ [A-Za-z][A-Za-z][A-Za-z][ ][ 0-9][0-9] / /' | sed 's/ [0-9][0-9]:[0-9][0-9]:[0-9][0-9] / /' | tr -s "[:space:]" | cut -f8- -d" "
Но боюсь, что один чортъ упрусь в нестандартизованный вывод ps'а
А вот тут можно посмотреть картины моей супруги http://sevil.pro

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Задачка по обработке текста
« Ответ #6 : 01 августа 2011, 13:14:26 »
один чортъ упрусь в нестандартизованный вывод ps'а
дык проверить что команда начинается с 8 столбика не так уж и сложно :)
Not as ultimate as 42, but pretty close...

Оффлайн rjhdby

  • Постоялец
  • ***
  • Сообщений: 432
  • Рейтинг: 3
  • Пол: Мужской
    • rjhdby
    • Просмотр профиля
Re: Задачка по обработке текста
« Ответ #7 : 01 августа 2011, 13:16:06 »
Через awk попробуй так
ps -ef|grep root|grep -v grep |awk '{ for(i=8;i<=NF;i++) printf("%s ",$i);   printf("\n")  }'
Там засада вот в этом
Цитировать
    root 24821 24814  0  Jul 29  ?         0:11 /opt/OV/bin/OpC/opcuiwww
    root 24821 24814  0  Jul  9  ?         0:11 /opt/OV/bin/OpC/opcuiwww
    root 21703 21702  1 13:20:00 ?         0:00 /opt/wbem/bin/cimprovider -l -s
А вот тут можно посмотреть картины моей супруги http://sevil.pro

Оффлайн VanDyke

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Задачка по обработке текста
« Ответ #8 : 01 августа 2011, 13:25:42 »
rjhdby, мне кажется легче проверить UNIX-ы на наличие -o. С разным количеством столбцов угадывать варианты можно долго :)
Not as ultimate as 42, but pretty close...

Оффлайн shs

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: Задачка по обработке текста
« Ответ #9 : 01 августа 2011, 14:15:58 »
вот такой regex можно использовать для разбора:
'^\s*root\s+(?:.+)\d?\d:\d\d\s+(.+?)$'

группа захвата захватит нужную тебе часть строки, как это прилипить к вашим sed и прочим grep - не знаю ;)

Оффлайн shs

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: Задачка по обработке текста
« Ответ #10 : 01 августа 2011, 14:17:14 »
вот такой regex можно использовать для разбора:
'^\s*root\s+(?:.+)\d?\d:\d\d\s+(.+?)$'

группа захвата захватит нужную тебе часть строки, как это прилипить к вашим sed и прочим grep - не знаю ;)
чо-то я чуток лишнего навернул, можно так:
'^\s*root\s+.+\d?\d:\d\d\s+(.+?)$'
или даже так:
'^\s*root\s+.+\d?\d:\d\d\s+(.+)$'

Оффлайн shs

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: Задачка по обработке текста
« Ответ #11 : 01 августа 2011, 14:26:14 »
подозреваю, что должно получиться что-то типа следующего:
ps -fu $USER | sed 's/^\s*root\s+.+\d?\d:\d\d\s+\(.+\)$/\1/'

Оффлайн rjhdby

  • Постоялец
  • ***
  • Сообщений: 432
  • Рейтинг: 3
  • Пол: Мужской
    • rjhdby
    • Просмотр профиля
Re: Задачка по обработке текста
« Ответ #12 : 01 августа 2011, 15:03:02 »
У меня в чпуксе крайне куций sed  :dash:
\d \s он тупо не понимает. А на + реагирует неадекватно.
А вот тут можно посмотреть картины моей супруги http://sevil.pro

Оффлайн shs

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 4401
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: Задачка по обработке текста
« Ответ #13 : 01 августа 2011, 15:06:15 »
У меня в чпуксе крайне куций sed  :dash:
\d \s он тупо не понимает. А на + реагирует неадекватно.
ну замени + на *, в данном конкретном случае разницы не будет. вместо \s  напиши пробел или [ \t].

Оффлайн rjhdby

  • Постоялец
  • ***
  • Сообщений: 432
  • Рейтинг: 3
  • Пол: Мужской
    • rjhdby
    • Просмотр профиля
Re: Задачка по обработке текста
« Ответ #14 : 01 августа 2011, 15:11:51 »

У меня в чпуксе крайне куций sed  :dash:
\d \s он тупо не понимает. А на + реагирует неадекватно.
ну замени + на *, в данном конкретном случае разницы не будет. вместо \s  напиши пробел.
Ну в общем действительно, можно зацепиться за " [0-9][0-9]*:[0-9][0-9] "
ps -fu $USER | sed 's/.* [0-9][0-9]*:[0-9][0-9] \(.*\)/\1/'
работает
А вот тут можно посмотреть картины моей супруги http://sevil.pro