2014-11-18 4 views
1

я использовал эту RegEx-тестер, чтобы проверить, что мой RegEx работает: http://regex101.com/RegEx в Grep заявлении

The RegEx I'm using is: \s?(?<='username' => ').*[^'] 
The string I'm looking at is: 'username' => 'test12345' 
The substring I want to get is: test12345 

Когда я вхожу в RegEx в RegEx-тестере, это показывает, что подстрока получает поймает.

Теперь я хочу использовать RegEx для grep подстроки из файла. До сих пор мне не повезло с этим утверждением:

grep "\s?(?<='username' => ').*[^']" ./file_to_search 

grep не вызывает ошибок. Это просто не дает результата, как если бы совпадение не было найдено.

Я экспериментировал с ускользанием апострофов в grep-заявлении с помощью обратных косых черт, но безрезультатно.

Любая помощь очень ценится.

+0

Примечание вы используете '* [^ ']' в то время как вам нужно' [^'] * ', означая:. Набор символов до'' 'найдено. Ваша попытка заключалась в следующем: набор символов, а затем символ, не являющийся '' '..., который не имеет большого смысла. – fedorqui

+1

Благодарим вас за помощь. – DerpMeister

ответ

1

Чтобы заставить lookbehind работать, необходимо включить параметр -P perl-regexp, а также включить параметр соответствия -o на grep для печати только совпадения вместо печати всей строки.

grep -oP "\s?(?<='username' => ')[^']*" file 

ИЛИ

grep -oP "'username' => '\K[^']*" file 
+0

Это работает! Я смиренно кланяюсь вам и вашим знаниям о grep, RegEx и всех его творениях ... – DerpMeister