匹配後有 sed echo 字串

匹配後有 sed echo 字串

我需要直接/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

您的輸出包含任意數量的隨機內容以及您感興趣的一行。

 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 

這會將任何數字字串單獨佔一行,greps 會尋找您的字串,然後列印後面的一個。

這真是個駭客;解析 HTML 的正確方法是使用 HTML 解析器。但它可能可以完成您只需要一個字串的受控輸入的工作。

稍微簡潔的方法是使用 awk,如果您經常處理這類事情,那麼絕對值得學習。

相關內容