Расширенные регулярные выражения (EREs): как включить шаблон, но исключить определенный супернабор шаблонов в совпадениях?

Это неправильный способ обработки 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
1
17.01.2017, 23:18
3 ответа

После довольно продолжительного обсуждения с @don_crissti, окончательное решение было таким

ps auxf | grep -E '[m]yProcess' | grep -vE 'test_[m]yProcess'

Это сначала получит все строки, содержащие 'myProcess', а затем сопоставит все строки, НЕ содержащие строки с 'test_myProcess' (-v инвертирует соответствие). Параметр -E вместе со скобками просто предотвращает совпадение двух grep процессов, которые будут перечислены в ps. Это оказалось намного проще, чем пытаться найти один regex, который бы правил их все. Спасибо всем за помощь.

2
27.01.2020, 23:34

Итак, вы хотите 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
0
27.01.2020, 23:34

(? - это оператор регулярного выражения Perl. Спецификацию стандартного ERE можно найти здесь .

Похоже, здесь вы хотите найти процессы, список аргументов которых либо начинается с myProcess , либо содержит / myProcess .

Итак:

pgrep -f '(^|/)myProcess'
1
27.01.2020, 23:34

Теги

Похожие вопросы