bash - список аргументов parse в файле

У меня есть скрипт под названием foo.sh, который содержит что-то вроде

exec myapp -o size=100m -f 

Любая идея создания другого скрипта, который анализирует foo.sh и извлекает значение size ? Можно предположить, что myapp появляется только один раз в foo.sh, но порядок аргумента size может появляться в любом месте списка аргументов

благодаря

3
nl ja de

3 ответы

С в оболочке:

$ grep -oP 'myapp.*?size=\K\d+m' foo.sh
100m

С в оболочке:

$ awk -F'size='  '{sub(/ -f/, "");print $2}' foo.sh
100m

или

$ awk '{print gensub(/.*size=([0-9]+m).*/, "\\1", $0)}' foo.sh
100m

С в оболочке:

$ perl -lne 'print $1 if /exec.*?size=(\d+m)/' foo.sh
100m

или using a shell funny trick :

$ declare $(grep -oP "\b\w+=\w+\b" foo.sh)
$ echo $size
100m
2
добавлено
Конечно, без сомнения =)
добавлено автор Gilles Quenot, источник
Какой хороший набор вариантов!
добавлено автор fedorqui, источник
+1 уже давно искал этот непослушный \ K !
добавлено автор Rubens, источник
это тоже работает!
добавлено автор philipdotdev, источник
cat foo.sh | egrep -o 'size=[[:digit:]]+' | awk -F= '{print $2}'
0
добавлено
cat | grep | awk - бесполезное использование cat & grep. partmaps.org/era/unix/award.html#cat
добавлено автор Gilles Quenot, источник
это почти работает. Я надеялся получить все между «size =» и следующим символом пробела
добавлено автор philipdotdev, источник

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

sed  -ne '/exec myapp -o size=/{s/[^0-9]*\([m0-9]*\).*/\1/;p;q;}'

Как только он найдет правильную строку, он извлекает значение размера, печатает его и затем завершает работу.

0
добавлено
Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

pro.bash
pro.bash
123 участник(ов)

All about Nix shells, signals, processes and development in general.

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru