이 sed 명령은 무엇을 합니까? 어떻게 바꿀 수 있나요?

이 sed 명령은 무엇을 합니까? 어떻게 바꿀 수 있나요?

이 명령의 기능을 이해하지 못합니다.

 grep '<span id="geodata" class="geo">[-0-9.]*; [-0-9.]*</span>' -R articles/ --only-matching | sed 's@articles//@@' | sed 's@:<span id=.geodata. class=.geo.>@ @' | sed 's@; @ @' | sed 's@</span>@@' | sort -u -b -k1 > geocodes_from_html.txt

몇 가지 배경지식: 저는 위키 기사를 작성 중이고 그 기사들로 가득 찬 폴더("기사")를 가지고 있습니다. 처리 스크립트는 몇 년 전에 작성되었으며, 당시 장소에 대한 지리 정보는 일반적으로 다음과 같았습니다.

   <span id="geodata" class="geo">[-0-9.]*; [-0-9.]*</span>

이제 다음과 같이 보입니다.

  <abbr class="latitude">[-0-9.]*</abbr><abbr class="longitude">[-0-9.]*</abbr>

이 명령이 작동하려면 어떻게 변경해야 합니까?

답변1

제공된 명령은 디렉토리의 모든 파일에서 grep이 문자열을 검색합니다 . 다음 명령은 여러 문자열을 대체합니다.<span [...]</span>articlessed

예를 들어 sed s@articles/@@(슬래시 /만) 다음과 같이 읽을 수 있습니다. sed search@this_string@replace_with_this@; 문자열은 articles/무엇이든 대체됩니다. 한 스크립트에서 다음 스크립트로 전달하는 대신 모든 스크립트를 하나의 스크립트로 결합하여 동일한 결과를 얻을 수 있습니다 sed.

좌표를 추출하기 위해 다른 명령을 사용하지 않으려면 다음을 사용할 수 있습니다.

grep '<abbr class="latitude">[-0-9.]*</abbr><abbr class="longitude">[-0-9.]*</abbr>' -R articles --only-matching | sed 's@articles/@@;s@:<abbr class="latitude">@ @;s@<abbr class="longitude">@ @;s@</abbr>@@g' | sort -u -b -k1 >geocodes_from_html.txt

관련 정보