Как получить неизвестную подстроку с регулярным выражением? Я знаю, что до и после нужной строки, но я не хочу, чтобы известная часть была в результате.Совпадение неизвестной подстроки с RegEx
Пример текста:
jhgjgjgvocher_SOMETHINGHERE.dbhjjkghjkg
vocher_SOMETHINGELSE.db
Я ищу 'SOMETHINGHERE' и '' SOMETHINGELSE только.
vocher_
и .db
всегда до и после соответствующей детали, но не должны быть в результате.
Рабочий раствор А:
cat test | egrep -o "vocher_.*\.db" | cut -d "_" -f2 | cut -d "." -f1
... но вы знаете, что это некрасиво.
Можно ли искать точно для неизвестной части с регулярным выражением (в данном случае только часть .*
), или мне нужно использовать что-то вроде sed? Есть ли лучшее решение?
Попробуйте заменить 'egrep -o 'vocher _. * \ .db" 'с' grep -oP' (? <= Vocher _). *? (? = \. Db) "' –
@Wiktor: Правильно, но нет требуется знак вопроса после звездочки. – JosefScript
см. Также [Примеры Lookahead и Lookbehind в SO doc] (https://stackoverflow.com/documentation/regex/639/lookahead-and-lookbehind#t=201702220503256206195) – Sundeep