Bash: выбрать из последовательности групп цифр в строке последнюю группу

Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Версия ОС вместе с разрядностью. Пример: LM 18.1 x64, LM Sarah x32 2. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 3. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 4. Суть. Желательно с выводом консоли, логами. 5. Скрин. Просьба указывать 1, 2 и 3 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
madesta
Сообщения: 265
Зарегистрирован: 11 июн 2017, 18:47
Решено: 7
Благодарил (а): 21 раз
Поблагодарили: 55 раз

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Сообщение madesta » 17 ноя 2018, 21:09

Задуманная задача представляет из себя реализацию автоматического цикла отбработки команд "запуск приложения - работа - выход из приложения".

В качестве приложения рассматривается клиент Linux appimage облака pCloud. Для его остановки по расписанию планируется использовать команду kill -15 pid_процесса (команда kill -15 срабатывает именно по pid), что соответствует "прошу процесс мягко закрыться".

При работе Linux appimage облака pCloud создаёт несколько процессов:
pcloud-proccesses-1.png
pcloud-proccesses-2.png
Поэтому при определении pid процесса pcloud получается последовательность групп цифр, например: 14682 14661 14632 14620 14616 (получена из команды pidof pcloud> ~/pcloud.txt) Примечание. Если не закрывать все автоматически открывшиеся окна, то таких процессов будет шесть, например: 15282 15254 15233 15204 15192 15188

Экспериментально установлено, что если сделать kill-15 процессу с самым меньшим из полученных значений (то есть из 1-го примера --> kill -15 14616), то задача, в принципе решена. Так как в случае дальнейшего присвоения переменной этого значения, например MYVAR=... , выполняется команда kill -15 $MYVAR и все процессы pcloud "гаснут".

Конкретный вопрос

1) может ли кто-нибудь подсказать как присвоить MYVAR самое последнее значение (14616) из последовательности групп цифр, которые в 1 строку через пробел;
2) или имеется ли способ последовательность 14682 14661 14632 14620 14616 в файле pcloud.txt преобразовать к виду "в столбик"
14682
14661
14632
14620
14616
после чего можно было бы выполнить MYVAR=`sed -n '5p' ~/pcloud.txt`

Решение slant » 17 ноя 2018, 22:29
Простой способ выловить последнее число из ряда:
echo 14682 14661 14632 14620 14616 | grep -o [0-9]*$
Чтобы загнать это в переменную:
MYVAR=`echo 14682 14661 14632 14620 14616 | grep -o [0-9]*$`
Тоже самое, из файла: MYVAR=`cat ~/pcloud.txt | grep -o [0-9]*$` (подразумевается, что в файле именно строчка а не столбик).

Перейти к ответу ➙
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя

slant
Сообщения: 1773
Зарегистрирован: 21 июн 2017, 15:09
Решено: 27
Благодарил (а): 14 раз
Поблагодарили: 770 раз

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Сообщение slant » 17 ноя 2018, 22:29

Простой способ выловить последнее число из ряда:
echo 14682 14661 14632 14620 14616 | grep -o [0-9]*$
Чтобы загнать это в переменную:
MYVAR=`echo 14682 14661 14632 14620 14616 | grep -o [0-9]*$`
Тоже самое, из файла: MYVAR=`cat ~/pcloud.txt | grep -o [0-9]*$` (подразумевается, что в файле именно строчка а не столбик).

Аватара пользователя

Chocobo
Сообщения: 9148
Зарегистрирован: 27 авг 2016, 19:57
Решено: 198
Откуда: НН
Благодарил (а): 637 раз
Поблагодарили: 2614 раз

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Сообщение Chocobo » 17 ноя 2018, 23:11

еще пара вариантов навскидку :smile:

Код: Выделить всё

▶ echo 14682 14661 14632 14620 14616 | awk '{print $NF}'           
14616

Код: Выделить всё

▶ echo 14682 14661 14632 14620 14616 | rev | cut -d' ' -f 1 | rev
14616
Изображение
   
Изображение

Аватара пользователя

demonlibra
Сообщения: 152
Зарегистрирован: 12 авг 2017, 06:09
Решено: 1
Благодарил (а): 4 раза
Поблагодарили: 44 раза

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Сообщение demonlibra » 18 ноя 2018, 00:23

Может быть так будет проще

Код: Выделить всё

killall -s TERM pcloud
ZXSpectrum→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-19
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Автор темы
madesta
Сообщения: 265
Зарегистрирован: 11 июн 2017, 18:47
Решено: 7
Благодарил (а): 21 раз
Поблагодарили: 55 раз

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Сообщение madesta » 18 ноя 2018, 13:50

Благодарю всех откликнувшихся.
Все предложенные варианты приводят к решению поставленной задачи.

В связи с этим хотелось бы у модератора этой ветки форума получить консультацию, так как нахожусь в некоторой растерянности.

Полагаю, что следует отметить какое-то сообщение как решение. Я бы и slant, и Chocobo, и demonlibra отметил как "решено", т.е. установить "решено" каждому из участников обсуждения. ПО форума это позволяет сделать?

Аватара пользователя

darkfenix
Сообщения: 5203
Зарегистрирован: 27 июн 2017, 10:36
Решено: 61
Откуда: Нижний Тагил
Благодарил (а): 289 раз
Поблагодарили: 961 раз

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Сообщение darkfenix » 18 ноя 2018, 13:53

madesta писал(а):
18 ноя 2018, 13:50
ПО форума это позволяет сделать?
К сожалению нет. Можешь отметить только одно.
Изображение

Аватара пользователя

Автор темы
madesta
Сообщения: 265
Зарегистрирован: 11 июн 2017, 18:47
Решено: 7
Благодарил (а): 21 раз
Поблагодарили: 55 раз

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Сообщение madesta » 18 ноя 2018, 15:40

Хотя ставлю "решено" первому сообщению, хотелось бы подчеркнуть, что изначально хотел "решено" поставить всем. 3-е сообщение содержит в себе команду выключения всех процессов pcloud. При просмотре в диспетчере задач хода выключений клиента от стандартного (от разработчиков) до предложенных вариантов сделано предположение, что основным, всё-таки, является процесс с наименьшим pid, соответствующему pCloud Drive, а все остальные являются или дочерними или зависимыми. Поэтому выключение по наименьшему значению pid показалось более корректным. Может быть cli версия (https://github.com/pcloudcom/console-client) клиента pCloud и свободна от наличия нескольких процессов, но "хотелка" хотела именно GUI.

Ещё раз всех благодарю, высказанное взято "в копилку рецептов".

Вернуться в «Иное программное обеспечение»