태그 사이에서만 Grep

태그 사이에서만 Grep

다음과 같은 태그가 포함된 html 유형의 파일이 있습니다.

<Currentnumber>0.3.5</Currentnumber>

변수의 값을 캡처하는 방법 0.3.5오직이것?

나는 이 줄을 다음과 같이 grep'd했습니다:

grep -E "<Currentnumber>.*</Currentnumber>$" myfile

grep교육 목적으로 답변에 사용된 매개변수에 대한 설명도 제공되면 감사하겠습니다.

줄은 일부 공백(또는 탭)으로 시작하므로 다음이 작동하지 않습니다.

grep -E "^<Currentnumber>.*</Currentnumber>$" myfile

답변1

HTML을 구문 분석하기 위해 정규식을 사용하지 마십시오! 이것은 stackexchange 웹사이트에서 가장 흔한 오류입니다.

XML/HTML 파서를 사용하는 것이 더 좋습니다.,또는색슨 린트내 자신의 프로젝트

예:

xmllint --xpath '//Currentnumber/text()' file.html
xmlstarlet sel -t -v '//Currentnumber/text()' file.html
saxon-lint --xpath --html '//Currentnumber/text()' file.html

확인하다:HTML 태그와 함께 정규식 사용

답변2

sed 및 정규식 사용

sed -e 's/<Currentnumber>\(.*\)<\/Currentnumber>/\1/' file.html

답변3

이것이 다음 사람에게 도움이 되기를 바랍니다:

$ echo '<Currentnumber>0.3.5</Currentnumber>' | cut -d '>' -f 2 | cut -d '<' -f1
0.3.5

이 답변에 관해서 :

  • 귀하의 문자열/건초 더미는 "알려져" 있습니다. 그렇죠? 따라서 이와 같은 팁은 공정한 게임입니다.
  • 결함을 지적하겠습니다. 누군가 마크업을 변경하면 이 솔루션을 업데이트해야 할 수도 있습니다. 아름다운. (여전히 성능이 좋지 않고 정규식을 유지하기 어려운 것에 의존할 이유가 없습니다. "this"가 아닙니다.)
  • (항상 빌드 번호를 얻을 수 있도록 테스트 또는 온전성 검사를 수행하여 이와 같은 변경 사항을 빠르게 확인할 수 있습니다.)
  • 특별한 도구가 필요하지 않습니다. 최소한의 인클로저만 있어도 cut그곳에 있을 것입니다. ("컨테이너 내부에 린터를 설치하려면 DevOps가 필요합니다"에 대한 대답은 완전히 불가능합니다)

관련 정보