다음과 같은 태그가 포함된 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,xmlstarlet또는색슨 린트내 자신의 프로젝트
예:
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가 필요합니다"에 대한 대답은 완전히 불가능합니다)