Изменить регулярное выражение Python для работы в grep - PullRequest
0 голосов
/ 03 апреля 2019

Шаблон регулярного выражения re.compile(r'(?:_|\.)S\d{1,}(?:\.|_)') найдет любое имя с fileasdfadfs.S[0-9] или fileare_S[0-9] Как мне написать то же самое в Linux.Попытка выполнить поиск по файлу, чтобы найти .S и цифры или _S цифры

, с которыми я работаю до сих пор: grep "(?:_|\.)S\d{1,}(?:\.|_)" logs.txt

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

также можно использовать :

grep -P '(?:_|\.)S\d{1,}(?:\.|_)'

или более портативный:

perl -lne 'print $& if /(?:_|\.)S\d{1,}(?:\.|_)/' 
2 голосов
/ 03 апреля 2019

Заданное вами регулярное выражение намного сложнее, чем желаемый шаблон, который вы описываете.

grep -E '[._]S[[:digit:]]+[._]' logs.txt

(?:...) и \d - синтаксис PCRE - расширения добавлены в perl-совместимый регулярные выражения.Стандартизированный POSIX grep не поддерживает расширения PCRE;регулярные выражения, предназначенные для работы со всеми стандартными версиями grep, должны быть написаны для совместимости с BRE (базовые регулярные выражения POSIX) для работы без дополнительных аргументов или с ERE (расширенными регулярными выражениями POSIX) для работы с grep -E.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...