Zen*_*Zen 1 grep regular-expression
我有一堆文件,我想找出两个标签st
和et
.
如果我使用grep "st.*et" files
,我会将这两个标签包含在结果中。
比如st Hello world! et
。
但我只需要那Hello world!
部分。
有没有办法使用 grep(或其他正则表达式工具)仅显示标签之间的内容?
PS:我知道如何使用工具,如AWK
,python
做这些结果进一步处理,以达到我的目标。但我只是想知道可能有更直接的方法来做到这一点。
使用grep
基于最新 PCRE 支持构建的GNU :
echo 'st Hello world! et' | grep -oP "st\K.*?(?=et)"
Run Code Online (Sandbox Code Playgroud)
这里的关键是使用前瞻和后视零长度断言。
\K ==> Look-behind assertion
(?=et) ==> Look-ahead assertion
Run Code Online (Sandbox Code Playgroud)
有关更多信息,您可以在这里阅读。