sed를 사용하여 HTML 코드에서 일부 탭과 ​​개행 문자를 추가/제거하세요

sed를 사용하여 HTML 코드에서 일부 탭과 ​​개행 문자를 추가/제거하세요

HTML Tidy가 일부 요구 사항에 비해 충분히 유연하지 않은 것 같기 때문에 HTML Tidy를 사용한 후 추가 개선 프로세스로 HTML 코드를 개선하기 위해 sed를 사용하고 싶습니다.

이 명령을 사용하여 일부 탭 및/또는 줄 바꿈을 일부 태그에 추가하고 다른 태그에서 제거합니다.

s/<li>/\t&/g
s/\n<\/li>/<\/li>/g
  1. 첫 번째 명령은 속성이 없으면 잘 작동합니다. li그러면 속성이 있는지 여부에 관계없이 시작 태그를 어떻게 배치합니까?
  2. 두 번째 명령은 전혀 작동하지 않습니다. 여기 이전 줄의 끝에 닫는 태그를 넣고 싶습니다 </li>.

답변1

다음 예제 파일을 고려해보세요.

$ cat sample.html 
<li a=x>Point One
</li>
<li>Point Two
</li>

sed나는 이 명령이 당신이 원하는 것을 할 것이라고 믿습니다 (이것은 GNU sed가 필요할 수 있습니다):

$ sed -Ez 's|<li\b|\t<li|g; s|\n</li\b|</li|g' sample.html
        <li a=x>Point One</li>
        <li>Point Two</li>

어떻게 작동하나요?

  • -E

    확장 정규식을 사용하세요.

  • -z

    Null로 구분된 데이터를 읽습니다. 올바른 html 파일에는 널 문자가 없으므로 전체 파일을 한 번에 읽는 효과가 있습니다.

  • s|<li\b|\t<li|g

    이렇게 하면 각 항목 앞에 탭 문자가 배치되고 <li그 뒤에 단어 경계가 표시됩니다.

  • s|\n</li\b|</li|g

    <li이는 단어 경계가 뒤따르는 개행 문자의 각 발생을 대체합니다 <li.

변형: <li>선 자체를 배치합니다.

$ sed -Ez 's|<li[^>]*>|&\n|g; s|\n</li\b|</li|g' sample.html
<li a=x>
Point One</li>
<li>
Point Two</li>

의무적 경고

html은 복잡할 수 있으므로 이러한 sed명령은 간단한 경우에만 적합합니다.

관련 정보