我經常收到來自另一個部門的大型 html 報告,需要大量的手動作業才能將其編輯為所需的格式。
我想作業得更聰明一點。我可以通過以下方式下載該頁面:
wget -qO- <https://the_page.html>
但是我只想繪制一張開始的表格:
<!-- START Daily Keystroke
它在多行 html 中持續不斷,并且總是結束:
</table>
</div>
</div>
在下一次資料加載開始之前。我需要在一大塊文本/檔案中這些模式之間的所有內容。
我玩過我不太熟悉的 sed 和 awk,但似乎不知道每次這些工具不適合此任務時檔案中有多少行。似乎可以在特定模式上發揮更多作用的東西是合適的。
在這種情況下,我可以潛在地安裝其他實用程式。如果有人對可能有用的東西有任何經驗嗎?
uj5u.com熱心網友回復:
我玩過 sed 和 awk
請注意,這些最適合處理可能使用正則運算式描述的事物,而 HTML 不能。HTML 決議器是用于 HTML 檔案的設備。通常,您應該避免使用正則運算式來處理 Chomsky Type-2 裝置。
在這種情況下,我可以潛在地安裝其他實用程式。如果有人對可能有用的東西有任何經驗嗎?
我建議嘗試hxselect,因為它可以輕松提取匹配 CSS 選擇器的元素。它確實使用標準輸入,因此您可以將輸出通過管道傳輸到其中,請考慮以下示例:我想下載www.example.com頁面并提取其標題標簽,然后我可以這樣做:
wget -q -O - https://www.example.com | hxselect -i 'title'
如果您遇到一些格式不正確的 HTML,您可能會使用hxclean這將嘗試使其像這樣被 hxselect 接受
wget -q -O - https://www.example.com | hxclean | hxselect -i 'title'
如果上述任何一個都適用于您的 URL,那么您可能會開始尋找 CSS 選擇器,它只描述您要提取的表。有關可用功能,請參閱CSS 選擇器參考。我無法在沒有看到整個頁面來源的情況下制作選擇器。
uj5u.com熱心網友回復:
建議gawk切割第一條多行記錄。緊接著sed,剪頭直到<!-- ...。
gawk 'NR==1{print}' RS="</table>\n</div>\n</div>" input.html |sed '0,/<!-- START Daily Keystroke/d'
或者沒有中間檔案:
wget -qO- <https://the_page.html>| \
gawk 'NR==1{print}' RS="</table>\n</div>\n</div>" | \
sed '0,/<!-- START Daily Keystroke/d'
此腳本經過測驗可與提供的示例文本一起使用。
gawk解釋:
該gawk腳本在第一次出現時剪切輸入文本。
</table>
</div>
</div>
與左邊距對齊。
NR==1{print}
僅列印gawk記錄號 1。
第一條記錄由所有文本(多行)標識,以RS變數中的匹配模式終止。
RS="</table>\n</div>\n</div>"
一個正則運算式 ( RegExp) 匹配 gawk多行記錄分隔符。
如果您想在 RegExp 中包含縮進空格。嘗試:
</table>
</div>
</div>
RS="[[:space:]]*</table>[[:space:]]*\n[[:space:]]*</div>[[:space:]]*\n[[:space:]]*</div>"
sed解釋:
洗掉所有行直到第一次出現 RegExp<!-- START Daily Keystroke
0,/<!-- START Daily Keystroke/
sed線范圍。從 line 開始0,直到匹配的第一行<!-- START Daily Keystroke/
d
洗掉/忽略范圍內的所有行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/484765.html
上一篇:PTRACE_GET_SYSCALL_INFO總是將info.op回傳為“PTRACE_SYSCALL_INFO_NONE”
