提问者:小点点

grep语句中的RegEx


我已经使用这个正则表达式测试器来检查我的正则表达式是否有效:http://regex101.com/

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-tester中输入RegEx时,它显示子字符串被捕获。

现在我想使用正则表达式从文件中 grep 子字符串。到目前为止,我对这个说法没有运气:

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

grep 不会抛出任何错误。它根本不会像找不到匹配项时那样给出结果。

我尝试过用反斜杠来转义grep语句中的撇号,但是没有用。

非常感谢任何帮助。


共1个答案

匿名用户

要使查找工作,您需要启用-Pperl regexp参数,还需要在grep上启用-oonly matching参数,以便只打印匹配项,而不是打印整行。

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

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