grep을 사용하여 특정 키워드 사이의 콘텐츠를 필터링하는 방법은 무엇입니까?

grep을 사용하여 특정 키워드 사이의 콘텐츠를 필터링하는 방법은 무엇입니까?

여러 개의 파일이 있는데 st두 태그와 et.
을 사용하면 grep "st.*et" files결과에 두 태그가 모두 포함됩니다.
예를 들어 st Hello world! et. 그런데 이 부분
만 필요해요 .Hello world!

태그 사이의 내용만 표시하기 위해 grep(또는 다른 정규식 도구)을 사용하는 방법이 있습니까?


추신: 나는 내 목표를 달성하기 위해 이러한 결과를 추가로 처리하기 위해 AWK등과 같은 도구를 사용하는 방법을 알고 있습니다 . python하지만 이 작업을 수행하는 더 직접적인 방법이 있는지 궁금합니다.

답변1

grep최신 PCRE 지원과 함께 GNU 사용:

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

여기서 핵심은 길이가 0인 Lookahead 및 LookBehind 어설션을 사용하는 것입니다.

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

자세한 내용은 다음을 참조하세요.여기.

답변2

다음을 사용할 수 있습니다 sed.

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

관련 정보