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

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

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

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


PS:我知道如何使用AWK、等工具python对这些结果进行进一步处理以达到我的目标。但我只是想知道是否有更直接的方法可以做到这一点。

答案1

grep使用带有最新 PCRE 支持的GNU :

echo 'st Hello world! et' | grep -oP "st\K.*?(?=et)"

这里的关键是使用前瞻和后视零长度断言。

\K     ==>  Look-behind assertion
(?=et) ==>  Look-ahead assertion

欲了解更多信息,您可以阅读这里

答案2

您可能想使用sed

sed -n 's/.*st\(.*\)et.*/\1/p'

相关内容