Linux+ 중간고사 시험을 치르고 있는데 태그가 포함된 헤더 섹션을 복사하여 파일로 출력해야 하는 문제를 발견했습니다. 내 중간고사는 5일에 마감되므로 누군가가 헤더 섹션과 태그를 찾을 때 사용할 올바른 코드를 보여주면 정말 도움이 될 것입니다. 나는 시도했지만 파일을 고양이하면 헤더나 태그가 포함되어 있지 않다고 curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt
말합니다 . <head>
그렇다면 파일의 올바른 출력을 얻으려면 무엇을 입력해야 합니까?
답변1
이는 원하는 것보다 조금 더 복잡합니다.
첫째, 명령에 몇 가지 구문 문제가 있습니다. 이것은 curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt
아마도 다음과 같습니다:
curl www.hackthissite.org | grep "<head>" > ~/data/public/myfirstname\ mylastname/head.txt
그러나 그것조차도 당신이 원하는 것을 하지 못할 것입니다. 당신은 단지 헤더 여는 태그를 찾고 있는 것이지 헤더와 닫는 태그 사이의 내용을 찾는 것이 아니기 때문입니다.
나는 이것을 생각해 냈습니다 :
curl www.hackthissite.org > TEMPORARYFILE.txt; grep -A $(($(grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1) - $(grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1))) "<head>" TEMPORARYFILE.txt > ~/data/public/myfirstname\ mylastname/head.txt; rm TEMPORARYFILE.txt
따라서 부분적으로 :
grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1
닫는 태그가 있는 줄 번호를 가져옵니다. 동일하게 적용되지만 grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1
여는 태그에도 적용됩니다.
$(($(grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1) - $(grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1)))
그런 다음 시작 태그와 종료 태그 사이에 몇 줄이 있는지 계산하는 가 있습니다 .
-A
grep
이는 일치 항목이 인쇄된 후 줄 수를 제어할 수 있는 옵션과 함께 사용됩니다 . 따라서 시작 헤더 태그를 검색하고 해당 태그와 닫는 태그 사이의 모든 줄을 인쇄합니다.
답변2
다이다이를 사용하세요:
curl -s www.hackthissite.org | awk '/<\<head>/,/<\/head>/ {print}'