모든 HTML 파일을 살펴보고 예제 등과 같은 잘못된 태그가 있는지 확인하고 싶습니다. 이것이 HTML 파일에서 어떤 태그가 닫히지 않았는지 확인하고 싶은 것입니다 <br>
.<hr>
for htmlFile in `ls -f *.html ` ; do
if `cat $htmlFile | grep -inE "\<br\>"` ; then
echo "In file $htmlFile there are errors on the following lines: " >> ~/Desktop/$1_errors.txt
cat $htmlFile | grep -in "<br>"| cut -d ":" -f1 >> ~/Desktop/$1_errors.txt
echo "----------------------------------------" >> ~/Desktop/$1_errors.txt
fi
done
하지만 오류가 발생하고 그것이 내 정규식인 것 같습니다.
./script.sh: line 14: 10:<BR: command not found
이것은 내가받는 오류 중 하나입니다 :)
답변1
쉘 구문의 오류를 수정하더라도브라얌의 답변올바르게 식별되면안 돼요이것이 실제로 작동하도록 하십시오. 기껏해야 저지르게 될 실수를 잡을 수는 있지만, 깨지고 있다는 것을 눈치채지 못할 수도 있는 종류의 손상을 깨뜨리는 태그를 안정적으로 찾는 grep을 얻을 수는 없습니다.
이를 제대로 수행하려면 HTML 태그를 실제로 구문 분석하고 이해할 수 있는 것을 사용해야 합니다. 태그 구문 문제를 지적할 수 있는 HTML 유효성 검사 도구가 많이 있습니다. 먼저 확인해야 할 가장 일반적인 상황 중 하나는 입니다 tidy
. 특히 다음 플래그를 사용하여 파일에서 실행해 보세요.
-errors, -e show only errors and warnings
이는 문서 유형에 맞게 닫히지 않는 콘텐츠 등 깨진 탭이 있는 위치를 알려줍니다.
tidy 외에도 HTML 구문 검사를 위한 다른 많은 옵션이 있습니다. 사용W3C 검증자좋은 것입니다. 당신이 무엇을 하든 - 컴퓨터의 신을 위험에 빠뜨리세요불과 유황이 너희 위에 부어지느니라—패턴 일치를 위한 grep과 같은 html 구문을 구문 분석하기 위해 정규식을 사용하지 마십시오.
답변2
문제는 다음 줄에 있습니다.
if `cat $htmlFile | grep -inE "\<br\>"` ; then
이는 쉘에 다음을 알려줍니다.
- 고양이 파일,
- 그것을 구문 분석하고
<br>
태그와 일치하는 줄을 찾으십시오. - 실행 출력
문제는 마지막 단계입니다. 명령의 출력을 실행하지 말고 테스트해야 합니다.
if grep -inEq "\<br\>" $htmlFile ; then
물론 HTML을 구문 분석하려면 정규 표현식이 아닌 실제 구문 분석기를 사용해야 합니다.