Форум русскоязычного сообщества Ubuntu


За новостями русскоязычного сообщества и Ubuntu в целом можно следить на нашей страничке в Google+

Автор Тема: sed & awk форматирование вывода  (Прочитано 453 раз)

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

Оффлайн slyberkut

  • Автор темы
  • Любитель
  • *
  • Сообщений: 60
  • Ubuntu 14.04 Server, GA-X48-DQ6, Q9650
    • Просмотр профиля
sed & awk форматирование вывода
« : 07 Июнь 2016, 17:25:09 »
Приветствую уважаемых форумчан!
Пытаюсь своими силами освоить sed и awk, но пока что то не очень получается...
Суть в следующем, имеется вывод программы ps:

10567 ?        Sl     0:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
10693 pts/0    S+     0:00 grep --color=auto -w mysqld

мне же нужно отформатировать вывод так, чтобы было только одно слово mysqld в первой строчке

то есть

mysqld
Плюс - минус = заряд, фаза - ноль = ???

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 14922
  • Я не слышу.
    • Просмотр профиля
Re: sed & awk форматирование вывода
« Ответ #1 : 07 Июнь 2016, 18:03:24 »
... | grep -o "mysqld"
~.o

adawdp

  • Гость
Re: sed & awk форматирование вывода
« Ответ #2 : 07 Июнь 2016, 18:44:39 »
2016 Jun 07; 11:44 AM

— Ну если совсем примитивно и если я правильно понял задачу, после прочтения нескольких строк в руководстве по sed то вот так можно:
Код: Bash
  1. echo 'Sl     0:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid' | sed 's|.*ld\/||' | sed -r 's/\..+//'
— Предупреждаю, я не специалист :), точно можно лучше сделать, но это мне нужно ещё половину часа читать, а работа проклятая мешает делом заняться :)

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: sed & awk форматирование вывода
« Ответ #3 : 07 Июнь 2016, 21:35:24 »
ps -C mysqld -o comm=
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн slyberkut

  • Автор темы
  • Любитель
  • *
  • Сообщений: 60
  • Ubuntu 14.04 Server, GA-X48-DQ6, Q9650
    • Просмотр профиля
Re: sed & awk форматирование вывода
« Ответ #4 : 07 Июнь 2016, 23:11:22 »
... | grep -o "mysqld"

Прям почти то что нужно!!!

ps -C mysqld -o comm=

А вот это прям то, что надо. Сколько пользуюсь ps, а об этом не знал, а можете пояснить эту команду немного?

2016 Jun 07; 11:44 AM

— Ну если совсем примитивно и если я правильно понял задачу, после прочтения нескольких строк в руководстве по sed то вот так можно:
Код: Bash
  1. echo 'Sl     0:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid' | sed 's|.*ld\/||' | sed -r 's/\..+//'
— Предупреждаю, я не специалист :), точно можно лучше сделать, но это мне нужно ещё половину часа читать, а работа проклятая мешает делом заняться :)


Попробовал, не сработало...


А как будет выгляжеть команда фильтрации если использовать sed или awk?
Плюс - минус = заряд, фаза - ноль = ???

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 14922
  • Я не слышу.
    • Просмотр профиля
Re: sed & awk форматирование вывода
« Ответ #5 : 07 Июнь 2016, 23:33:43 »
#/bin/bash
... | grep -qo "mysqld" || { echo "Not found/"; exit 1; }
echo "Yes!"
exit
~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: sed & awk форматирование вывода
« Ответ #6 : 08 Июнь 2016, 07:43:43 »
slyberkut,
Цитата: man ps
      -o format
              User-defined format.  format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify individual output columns.  The recognized keywords are described in the  STANDARD FORMAT SPECIFIERS section below.  Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired.  If all column headers are empty (ps -o pid= -o comm=) then the header line will not be output.

       -C cmdlist
              Select by command name.  This selects the processes whose executable name is given in cmdlist.

Пользователь добавил сообщение 08 Июнь 2016, 08:10:06:
| sed -n '/.*\(mysqld\).*/{s//\1/p;q}'Но я всё же предпочел grep| grep -om1 'mysqld\s'
« Последнее редактирование: 08 Июнь 2016, 08:10:06 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн slyberkut

  • Автор темы
  • Любитель
  • *
  • Сообщений: 60
  • Ubuntu 14.04 Server, GA-X48-DQ6, Q9650
    • Просмотр профиля
Re: sed & awk форматирование вывода
« Ответ #7 : 09 Июнь 2016, 00:26:32 »
slyberkut,
Цитата: man ps
      -o format
              User-defined format.  format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify individual output columns.  The recognized keywords are described in the  STANDARD FORMAT SPECIFIERS section below.  Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired.  If all column headers are empty (ps -o pid= -o comm=) then the header line will not be output.

       -C cmdlist
              Select by command name.  This selects the processes whose executable name is given in cmdlist.

Ну это я в мане в первую очередь прочитал, но все равно немного не понял смысл ключа cmdlist

Цитировать
| sed -n '/.*\(mysqld\).*/{s//\1/p;q}'

эхх а я думал там ключей гораздо меньше будет.....

но конечно в данном случае grep предпочтительней, дабы команда значительно короче выглядит, но все равно спасибо большое :)

Надо начинать упорно вкуривать регулярные выражения....
« Последнее редактирование: 09 Июнь 2016, 00:28:18 от slyberkut »
Плюс - минус = заряд, фаза - ноль = ???

Оффлайн slyberkut

  • Автор темы
  • Любитель
  • *
  • Сообщений: 60
  • Ubuntu 14.04 Server, GA-X48-DQ6, Q9650
    • Просмотр профиля
Re: sed & awk форматирование вывода
« Ответ #8 : 14 Июнь 2016, 12:21:07 »
Замечена ошибка в команде
sed -n '/.*\(mysqld\).*/{s//\1/p;q}'
- он в любом случае выводит mysqld, запущен сервис или нет
Плюс - минус = заряд, фаза - ноль = ???

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: sed & awk форматирование вывода
« Ответ #9 : 14 Июнь 2016, 15:37:52 »
slyberkut, Это не ошибка в команде, это неправильная постановка задачи и попытка решить её не предназначенными для этого средствами. Для определения наличия сервиса в процессах существует специально предназначенные инструменты: например pgrep
Что касается sed надо исключить его самогоsed -n '/.*\(mysqld\).*/{/sed/! s//\1/p;q}'
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.068 секунд. Запросов: 24.