일치 후 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 the 줄을 선택하는 이유입니다).트위터API 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를 사용하는 것인데, 이런 종류의 일을 많이 다룬다면 확실히 배울 가치가 있습니다.

관련 정보