HTML Tidy가 일부 요구 사항에 비해 충분히 유연하지 않은 것 같기 때문에 HTML Tidy를 사용한 후 추가 개선 프로세스로 HTML 코드를 개선하기 위해 sed를 사용하고 싶습니다.
이 명령을 사용하여 일부 탭 및/또는 줄 바꿈을 일부 태그에 추가하고 다른 태그에서 제거합니다.
s/<li>/\t&/g
s/\n<\/li>/<\/li>/g
- 첫 번째 명령은 속성이 없으면 잘 작동합니다.
li
그러면 속성이 있는지 여부에 관계없이 시작 태그를 어떻게 배치합니까? - 두 번째 명령은 전혀 작동하지 않습니다. 여기 이전 줄의 끝에 닫는 태그를 넣고 싶습니다
</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
명령은 간단한 경우에만 적합합니다.