Curl 및 Grep 구문 분석 콘텐츠

Curl 및 Grep 구문 분석 콘텐츠

curl명령의 출력을 구문 분석해야 합니다 .

curl --user test:test http://192.168.1.1/security/pkm.html | egrep '@company|config.pkm.password'

그러면 다음이 반환됩니다.

<input type="text" id="config.pkm.dentity" name="config.pkm.identity" value="[email protected]" maxlength="64" />
<input type="text" id="config.pkm.inner_identity" name="config.pkm.inner_identity" value="[email protected]" maxlength="64" />
<input type="password" id="config.pkm.password" name="config.pkm.password" value="382738" maxlength="64" />

name="config.pkm.identity"검색 해서 인쇄하고 싶어요 [email protected]검색 name="config.pkm.inner_identity"해서 인쇄하고 [email protected]싶어요 검색 name="config.pkm.password"해서 인쇄하고 싶어요382738

Grep은 [email protected], [email protected]382738. 만 출력합니다.

답변1

이를 위해서는 실제로 HTML 파서를 사용해야 하지만 (취약한) Awk 솔루션은 다음과 같습니다.

 awk -F'"' '/pkm.identity/ {id = $8}; /inner_/ {inner = $8}; /password/ {pass = $8} END {print id" "inner" "pass}' file
 [email protected] [email protected] 382738

답변2

쿼리로 정보를 얻으려면 정규식을 사용해야 합니다.캡처 그룹에 존재하지 않는 것 grep. 따라서 (또는 ) 명령을 curl사용하여 출력을 필터링 해 보십시오.sedawk

sed -n 's/.*name="config.pkm.identity" value="\(.[^"]*\)".*$/\1/p'

필드의 값붙잡혔습니다 \1(정규식 캡처 그룹 #1). 그러면 값이 출력됩니다.이름필드는 입니다 config.pkm.identity.

~을 위한이름사용하는 것입니다 config.pkm.password:

sed -n 's/.*name="config.pkm.password" value="\(.[^"]*\)".*$/\1/p'

등.

해당 이름에 사용 가능한 모든 값을 표시하려면 다음을 사용하십시오.

sed -n 's/.*name=".*" value="\(.[^"]*\)".*$/\1</p'

 

고쳐 쓰다댓글을 위해

sed 쿼리에서 일치하는 값을 선택하려면 다음 구성표를 사용하십시오. |파이프 기호(문을 나타냄 )를 사용하여 OR추가 정규식 그룹화를 사용하십시오. 이를 통해 sed주어진 변형 세트에서 최종 결과와 일치하도록 선택할 수 있습니다( |파이프 기호 및 ( )괄호를 이스케이프 처리하는 것도 참고하세요).

예를 들어:

sed -n -e 's/.*name="\(config.pkm.identity\|config.pkm.inner_identity\|config.pkm.password\)" value="\(.[^"]*\)".*$/\2/p'

그러면 스트림의 데이터와 이름이 검색되어 출력 config.pkm.identity됩니다 config.pkm.inner_identity.config.pkm.password

또한 최종 정규식 캡처 그룹 참조는 \2이제 두 번째 그룹입니다.

관련 정보