我有一堆文件,我想找出两个标签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'