sed를 사용하여 마지막 [중복] 대신 줄에서 첫 번째 일치 항목을 찾아 교체

sed를 사용하여 마지막 [중복] 대신 줄에서 첫 번째 일치 항목을 찾아 교체

다음과 같은 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 파서를 사용하여 텍스트 파일을 구문 분석하고 행과 데이터를 추출하면 작업이 더 빨리 완료될 수 있기 때문입니다.

관련 정보