grepを使用して特定のキーワード間のコンテンツをフィルタリングする方法は?

grepを使用して特定のキーワード間のコンテンツをフィルタリングする方法は?

複数のファイルがあり、st2つのタグと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)"

ここで重要なのは、長さゼロのLookaheadとLookBehindアサーションを使用することです。

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

詳細については、次を参照してください。ここ

おすすめ記事