如何使用grep过滤特定关键字之间的内容?

Zen*_*Zen 1 grep regular-expression

我有一堆文件,我想找出两个标签stet.
如果我使用grep "st.*et" files,我会将这两个标签包含在结果中。
比如st Hello world! et
但我只需要那Hello world!部分。

有没有办法使用 grep(或其他正则表达式工具)仅显示标签之间的内容?


PS:我知道如何使用工具,如AWKpython做这些结果进一步处理,以达到我的目标。但我只是想知道可能有更直接的方法来做到这一点。

shi*_*ams 5

使用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)

有关更多信息,您可以在这里阅读。