일치 후 sed 에코 문자열이 있습니다.

일치 후 sed 에코 문자열이 있습니다.

에코된 문자열 바로 뒤에 있어야 합니다 /pbs.twimg.com\/profile_images\/. 이것은 제가 약간의 도움을 받아 만든 검색 도구이며 모두가 추천합니다.sed, 하지만 실제로는 사용하지 않습니다sed그래서 잘 이해가 안 가네요. 하지만 스크립트는 다음과 같습니다.

read -r Username ;\
wget -q -O - https://twitter.com/"${Username}" | \
 sed -n '/data-screen-name=.'"${Username}"'".*data-user-id=/I \
    {s/^.*data-screen-name=.'"${Username}"'".*data-user-id="\([0-9]*\)".*$/\1/Ip;q}'

이 스크립트는 대부분의 계정에서 완벽하게 작동하지만 계정이 비공개인 경우에는 실패합니다. 대신 검색하면 /pbs.twimg.com\/profile_images\/ID만 표시되고 원래 스크립트에서와 같이 다른 변수는 표시되지 않습니다(그래서 data-screem-name=I can't use트위터API를 얻는 방법조차 모르는 사람들에게 이것을 내보내고 사용자를 위해 가능한 한 간단하게 만들려고 노력하고 있기 때문입니다.

여러 SO/SE 게시물을 살펴봤지만 이것이 중복된 게시물이라고 생각하지 않으므로 그렇다면 죄송합니다.

편집 ---- 이동하는 줄이 HTML 내부에 없기 때문에 개인 프로필에서는 작동하지 않습니다. 더 자세히 살펴본 후 /pbs.twimg.com\/profile_images\/사용자의 ID를 제공하고 개인 계정과 공개 계정 모두에 있음을 확인했습니다.

샘플 데이터:
지금 당장 내 계정에서 이것을 실행하면 작동하고 내 ID가 표시됩니다.

Username="thematrix1o1"
717835108540030976

하지만 개인 계정으로 실행하면 ID를 얻을 수 없습니다(라인이 없기 때문입니다).

Username="touchmytweets"
.

(보고서에 점이 없고 그냥 공백입니다)

내가 찾는 데 필요한 이미지는 다음과 같습니다.https://i.stack.imgur.com/WSACJ.jpg 보시다시피 그녀의 ID는 다음과 같습니다.726618076633030656
소규모 샘플 보고서
ile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/726618076633030656\/wwYbLwbs_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/726618076633030656\/wwYbLwbs_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/418265825\/1463628965","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"has_extended_profile":false,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":n

답변1

출력에는 임의의 임의의 엉성한 부분과 관심 있는 한 줄이 포함되어 있습니다. 해당 줄을 선택하고 ID를 제외한 모든 항목을 버리고 결과를 인쇄합니다.

 sed -n '/profile_images/s/.*profile_images\\\/\([0-9]\+\).*/\1/p'

해당 라인이 처리된 후 즉시 종료하면 이 작업이 약간 더 효율적으로 이루어질 수 있습니다.

실제로 이는 원래 코드가 수행하는 작업과 거의 동일합니다. 변경된 유일한 것은 사용된 정규식입니다.

답변2

나는 이와 같은 어려운 작업에 직면했을 때 가능하다면 그것을 라인 중심의 문제로 바꾸는 것을 좋아합니다. 다음과 같이 할 수 있습니다.

$ sed -E 's:[0-9]+:\n&\n:g' filename \
| grep -F -A1 '/pbs.twimg.com\/profile_images\' | tail -1 

그러면 임의의 숫자 문자열을 한 줄씩 배치하고 문자열을 파악한 후 그 이후의 문자열을 인쇄합니다.

정말 해킹입니다. HTML을 구문 분석하는 올바른 방법은 HTML 구문 분석기를 사용하는 것입니다. 그러나 하나의 문자열만 필요한 제어된 입력에 대해서는 작업을 완료할 수 있습니다.

약간 더 깔끔한 접근 방식은 awk를 사용하는 것입니다. 그런 일을 많이 다룬다면 확실히 배울 가치가 있습니다.

관련 정보