Ваши два вопроса в основном совпадают. В регулярных выражениях *
означает «сопоставить предыдущий символ 0 или более раз». Таким образом, 1 *
будет соответствовать 0 или более 1
, но 11 *
будет соответствовать 1
, за которым следует 0 или более 1
. Это означает, что
grep "11 *"
будет печатать только строки, содержащие как минимум один 1
. *
применяется только ко второму 1
, поэтому первое является обязательным. Вот почему вы не видите пустых строк, они не соответствуют 1
.
grep "1 *"
будет соответствовать 0 или более 1
. Здесь у вас нет предшествующего символа, который нужно сопоставить, поэтому пустые строки также сопоставляются, потому что они содержат 0 1
.
grep "111 *"
, grep "1111 *"
и т. Д. Не совпадают по той же причине, что и первый пункт выше. 111 *
будет печатать только строки, содержащие как минимум 2 1
, а возможно и больше. 1111 *
будет соответствовать строкам, содержащим как минимум 3 1
, возможно, больше.
Главное здесь в том, что *
влияет только на символ непосредственно перед ним, а не на весь узор. Чтобы задать квантор для всего шаблона, вы можете использовать круглые скобки:
$ grep '\(111\)*' regex.txt
1
11
111
1111
11111
$
Здесь круглые скобки (их нужно экранировать с помощью \
, чтобы они не были включены в шаблон поиска) группируют символы вместе поэтому к группе применяется *
.Как вы видите выше, это соответствует строкам, содержащим 0 или более вхождений 111
, поэтому печатаются все строки.
Is it similar to nohup for Ruby? Add a new line of nohup after that for each script? Will those introduce any delay in handing back control?
Шаблон, который вы установили с помощью nohup
, за которым следует ваша команда в фоновом режиме &
и запись PID $!
в файл, является типичным шаблоном, который вы увидите для такого типа работы.
Просто продолжайте использовать этот шаблон и создайте фон для всех процессов, которые вы хотите запустить таким образом, и запишите их PID в файлы.
And if I want to delegate this to another executable bash file, will it be a simple case of copying all those nohup commands to the new bash file and return control to the Wifi manager immediately? Will this be much better? How can I do this then?
Да, вы можете переместить все эти команды в другой скрипт и просто вызвать их одним вызовом. Трудно сказать, лучше это или хуже, это полностью зависит от того, чего вы пытаетесь достичь и как вы хотите управлять этими вещами.
Что касается того, как это сделать, похоже, вы уже знаете, что делать. Поместите все в скрипт и вызовите его из приложения WiFi-менеджера.
Возможно, вам потребуется передать в этот сценарий некоторые аргументы. Для этого вы можете просто использовать вызов этого скрипта вот так:
my_sub_cmd.bash $arg1 $arg2
Затем внутри этой команды вы передаете аргументы строки команды -через $1
, $2
и т. д.