HTML 찾기 및 바꾸기 또는 삭제Linux에서 sed 태그 사용

HTML 찾기 및 바꾸기 또는 삭제Linux에서 sed 태그 사용

<li>많은 index.html 페이지에서 다음 html 태그를 제거해야 합니다 .

<li>
                      <a href="https://forward.global.ssl.fastly.net/contributoragreements/" onclick="_gaq.push(['_trackEvent', 'ClickTracking', 'TopNav_Contact_Editorial', window.location.href]);">Editorial</a>
                    </li>

여러 파일에서 반복적으로 삭제해야 합니다. 그래서 나는 리눅스의 sed에서 정규식을 사용하는 것이 최선의 선택이라고 생각합니다. 여러 가지 방법을 시도했지만 해결책을 찾지 못했습니다. index.html 파일에는 다른 태그가 있지만 <li>어쨌든 편집해서는 안 됩니다. 위의 태그만 제거해야 합니다.

미리 감사드립니다.

답변1

문서 조각이 올바른 형식의 XHTML 파일의 일부라고 가정하면 li속성 값이 다음을 사용하는 노드가 포함된 모든 노드를 제거할 수 있습니다.ahrefhttps://forward.global.ssl.fastly.net/contributoragreements/xmlstarlet

xmlstarlet ed --delete '//li[a/@href = "https://forward.global.ssl.fastly.net/contributoragreements/"]' file.xhtml

문서가 올바른 형식의 XHTML 문서가 아닌 경우 먼저 복구를 시도할 수 있습니다.

xmlstarlet fo --recover --html file.html |
xmlstarlet ed --delete '//li[a/@href = "https://forward.global.ssl.fastly.net/contributoragreements/"]'

index.html회전된 디렉토리 구조의 모든 파일에 대해 이 명령을 실행하려면 top-dir다음 xmlstarlet과 같이 호출하십시오 find.

find top-dir -type f -name index.html -exec sh -c '
    tmpfile=$(mktemp)
    for pathname do
        cp "$pathname" "$tmpfile"
        xmlstarlet fo --recover --html "$tmpfile" |
        xmlstarlet ed --delete "//li[a/@href = \"https://forward.global.ssl.fastly.net/contributoragreements/\"]" >"$pathname.new"
    done
    rm -f "$tmpfile"' sh {} +

위의 코드는 index.html.new발견된 각 파일 에 대해 index.html새 파일을 생성 합니다. 위 명령에서 실행을 제거하기 전에 .new이러한 파일을 살펴보고 정상적으로 보이는지 확인해야 합니다.

분명히 너도 들어가야 해복사테스트 중에 데이터가 백업되었습니다.

관련 정보