단일 문자열의 두 패턴 사이에서 여러 결과 검색

단일 문자열의 두 패턴 사이에서 여러 결과 검색

일부 데이터를 구문 분석하는 데 문제가 있습니다.

내 파일은 다음과 같습니다.

bliblablo-/interestingdata1UUUUUUUUUUUUUUU/-blublu-/interestingdata2UUUUUUUUUUUUUUU/-blybly-/etcetcetc

나는 다음을 얻어야 한다:

interestingdata1
interestingdata2

다음과 같은 "흥미로운 데이터"가 하나만 있는 경우:

bliblablo-/interestingdata1UUUUUUUUUUUUUUU/-bl

다음 명령이 나에게 효과적이었습니다.

cat file | sed -E 's/.*[-][/](.*)[U]{15}.*/\1/g'

그러나 더 이상 동일한 문자열의 여러 일치 항목에 대해 작동하지 않습니다(마지막 일치 항목만 인쇄함). 내 구분 기호는 항상 "-/"로 시작하고 "UUUUUUUUUUUUUU"로 끝납니다.사이에 무엇이 있는지는 모르겠지만 모든 것을 추출해야 합니다..

이 문제를 해결하는 방법을 아는 사람이 있나요?

답변1

미리보기 및 비탐욕적 일치와 함께 PCRE 모드에서 GNU grep 사용:

$ grep -Po '(?<=-/).*?(?=U{15})' file
interestingdata1
interestingdata2

답변2

귀하의 예에 따르면 필요한 것은 이것이며 모든 UNIX 시스템의 모든 쉘에서 모든 awk와 작동합니다.

$ awk -F'([^/]+-|U{15})/' '{for (i=2; i<NF; i+=2) print $i}' file
interestingdata1
interestingdata2

관련 정보