다음과 같은 sed 명령이 있습니다.
sed 's/\('\''\).*div><div>/,/'
'
작은따옴표 사이의 모든 내용을 가져 div><div>
와서 쉼표로 바꿉니다 ,
. 내가 원하는 것과 매우 가깝게 작동합니다. 그러나 일부 줄에는 두 줄이 포함되어 div><div>
있으며 내 명령에는 두 번째 줄이 중지 지점으로 있으므로 첫 번째 줄에서 잘라내려고 합니다.
더 명확하게 설명하기 위해 데이터를 추출하려는 파일의 줄은 다음과 같습니다.
'>Person A</a></div><div>Teaching A</div></div></td><td width='50%'><div style='height: 50px; margin-bottom: 6px;'><div style='font-weight:bold'>Unknown or external</div><div>Teaching B<
Teaching A
내 출력이 다음과 같아질 때까지 모든 것을 교체하려고 합니다 ,Teaching A
. 그러나 내가 얻는 결과는 ,Teaching B
.
div><div>
마지막 인스턴스 대신 첫 번째 인스턴스를 가져오도록 sed 명령을 어떻게 조작할 수 있나요 ?
답변1
@AdminBee: 또한 탐욕스럽지 않은 매칭을 제안하고 싶습니다.
@Dr Little: 귀하의 솔루션은 무엇입니까? 우리에게 말 해주세요.
내가 올바르게 이해했다면 이것도 작동할 것입니다:
sed 's/\('\''\).*<.a><div><div>/,/'
.
정규식을 사용하여 HTML 파일을 구문 분석하는 것은 권장되지 않습니다. 예를 들어, 한번은 vim+regex를 사용하여 수십, 수천 개의 HTML 파일을 구문 분석했는데, 이는 시간에 민감한 작업이어서 후회했습니다. 왜? 실제 XML/HTML 파서를 사용하여 텍스트 파일을 구문 분석하고 행과 데이터를 추출하면 작업이 더 빨리 완료될 수 있기 때문입니다.