문자열의 같은 줄에 있는 두 구분 기호 사이에서 여러 일치 항목을 추출합니다.

문자열의 같은 줄에 있는 두 구분 기호 사이에서 여러 일치 항목을 추출합니다.

이것은 까다롭습니다. 입력은 여러 줄에 걸쳐 한 줄에 여러 번 나타납니다. "id=" 행이 많지만 ai-c "id="로 시작하는 행만 원합니다.

입력 예(긴 두 줄):

d-fl ai-c" id="3af3a73f26a63a-list-" lima zulu bravo hotel d-fl ai-c" id="7ab8273f273e7273f82c2-list-" alpha id="8372364fa2361ab1-list-" hotel foxtrox mike d-fl ai-c" id="973a72b72c72df12a2-list-" uniform hotel

11월 2선 골프 시작 d-fl ai-c" id="83hd826ab712cc71-list-" bravo mike mike d-fl ai-c" id="7612364bab72a-list-" 골프 마이크

원하는 출력은 다음과 같습니다.

id="3af3a73f26a63a"

id="7ab8273f273e7273f82c2"

id="973a72b72c72df12a2"

id="83hd826ab712cc71"

id="7612364bab72a"

내가 본 모든 스크립트 예제는 한 줄의 첫 번째 항목에서만 작동하는 것 같습니다.

답변1

한 가지 방법은 다음과 같습니다.

grep -oP '\hai-c"\h\Kid="[^-]*'  input.file | sed -e 's/$/"/'

GNU grep일치하는 항목이 발견되면 전체 줄을 출력하는 기본값이 아닌 일치하는 항목만 출력하는 옵션 과 기능을 사용합니다 .Perl-o

산출:

id="3af3a73f26a63a"
id="7ab8273f273e7273f82c2"
id="973a72b72c72df12a2"
id="83hd826ab712cc71"
id="7612364bab72a"

답변2

다른 방법:

sed ' s/d-fl ai-c" /\n/g; s/-/"\n/g; :L; /^id=/ P; D; bL; ' file
id="3af3a73f26a63a"
id="7ab8273f273e7273f82c2"
id="973a72b72c72df12a2"
id="83hd826ab712cc71"
id="7612364bab72a"

관련 정보