Это неправильный способ обработки html-файлов с помощью sed / awk /… Есть несколько специальных парсеров, но в качестве временной замены
sed '
/\n/{P;d;}
/<H3/s/[><]/\n/4g
/HREF/s/"/\n/g
D
' bookmarks.htm
Для не-GNU версий ] sed :
sed '
/\n/{P;d;} #if there is more then 1 line «P»rint 1st line then «d»elete all
/<\/H3/s//\n/ #replace «</H3» by «\n»ewline
/\n/s/">/\n/ #replace «">» by «\n»ewline if previous command is executed
/HREF/s/"/\n/g #put «\n»ewline» around url if «HREF» in line
D #«D»elete 1 first line, go to start
' bookmarks.htm
После довольно продолжительного обсуждения с @don_crissti, окончательное решение было таким
ps auxf | grep -E '[m]yProcess' | grep -vE 'test_[m]yProcess'
Это сначала получит все строки, содержащие 'myProcess'
, а затем сопоставит все строки, НЕ содержащие строки с 'test_myProcess'
(-v инвертирует соответствие). Параметр -E вместе со скобками просто предотвращает совпадение двух grep
процессов, которые будут перечислены в ps
. Это оказалось намного проще, чем пытаться найти один regex, который бы правил их все. Спасибо всем за помощь.
Итак, вы хотите pgrep
процессы, имя которых начинается с «myProcess»? Затем используйте регулярное выражение ^ myProcess
:
pgrep '^myProcess'
В регулярном выражении символ ^
означает, что следующее должно быть найдено в начале строки.
Пример:
$ pgrep -a app
3267 nm-applet
3280 /usr/bin/python /usr/share/system-config-printer/applet.py
3297 /usr/lib/mate-panel/wnck-applet
3306 /usr/lib/mate-panel/clock-applet
$ pgrep -a '^app'
3280 /usr/bin/python /usr/share/system-config-printer/applet.py