값이 포함된 매우 간단한 HTML 파일이 있습니다. 이 경우 값은 57입니다.
<eta version="1.0"><value uri="/user/var/48/10391/0/0/12528" strValue="57" unit="%" decPlaces="0" scaleFactor="10" advTextOffset="0">572</value></eta>
변수를 추출하고 작성하는 간단한 bash 스크립트 방법은 무엇입니까? 중간 단계로 파일에 wget을 요구하지 않고 파일이 저장된 파일을 열고 사용할 필요 없이 wget을 직접 사용하는 방법이 있습니까?
wget
명확히 하자면, 파일에 저장하고 파일 값을 확인하는 간단한 작업을 수행할 수 있습니까 ? 아니면 wget
명시적인 파일을 저장하지 않고 RAM 어딘가에서 수행할 수 있는 더 향상된 방법이 있습니까?
백만 번이나 감사하고 Norbert에게 깊은 감사를 드립니다.
답변1
grep
예제에서 값을 추출 하여 변수에 할당 할 수 있습니다 .
$ x=$(wget -0 - 'http://foo/bar.html' | grep -Po '<value.*strValue="\K[[:digit:]]*')
$ echo $x
57
설명하다:
$()
: 명령 대체grep -P
: grep 및 Perl 정규 표현식 활성화grep -o
:grep은 일치하는 항목만 표시합니다.부분선의\K
: 지금까지 일치하는 항목을 출력에 표시하지 않습니다.wget -O -
:다운로드한 문서를 표준 출력(파일 대신)으로 인쇄합니다.
그러나 일반적인 접근 방식의 경우 전용 HTML 코드 파서를 사용하는 것이 좋습니다.
답변2
wget
무슨 말씀을 하시는지 모르겠지만 파일을 다운로드하고 싶으신 것 같네요. 그렇다면 중간 임시 파일 없이 다운로드하여 구문 분석할 수 있습니다.
$ value=$(wget -O - http://example.com/file.html | grep -oP 'strValue="\K[^"]+')
$ echo $value
57
답변3
wget -O - ...
이 기술 외에도curl -Ss ...
임시 파일을 사용하여 문제를 피할 수도 있습니다.다음은
pup
(https://github.com/ericchiang/pup)은 CSS 기반 쿼리 언어를 지원합니다.
a) 라벨의 "텍스트" 값을 추출합니다 <value>
.
pup 'value text{}' # yields 572
b) 라벨의 strValue 속성 값을 추출합니다 <value>
.
pup 'value attr{strvalue}' # yields 57
답변4
cat input | grep -o strValue=".*" | sed 's/strValue=//g' | sed 's/"//g'