วิธีการรวม wget และ grep


11

ฉันมี URL ของหน้า html และฉันต้องการ grep มัน ฉันจะทำโดยได้wget someArgs | grep keywordอย่างไร

ความคิดแรกของฉันคือwget -q -O - url | grep keywordแต่เอาท์พุทของ wget ข้าม grep และเกิดขึ้นในอาคารในรูปแบบเดิม


grep เลือกบรรทัดที่คั่นด้วย (เช่น) อักขระขึ้นบรรทัดใหม่และตัวป้อนบรรทัดการตอบกลับ HTML ไม่มีบรรทัดที่มีข้อความที่มีมาร์กอัปเช่น <br> หรือ <p> ดังนั้นหน้าเว็บทั้งหน้าจึงดูเหมือน grep
RedGrittyBrick

1
@RedGrittyBrick คำสั่งของ OP ทำงานได้อย่างไม่มีที่ติสำหรับฉัน
slhck

คำตอบ:


11

วิธีที่ง่ายที่สุดคือใช้curlกับตัวเลือก-sสำหรับปิดเสียง:

curl -s http://somepage.com | grep whatever

@slhck: คำสั่งทั้งสองทำเหมือนกันทั้งหมดสำหรับฉัน
Dennis

@Dennis ลองไอเอ็นจีcurl http://superuser.com/questions/431581ด้วยเหตุผลใดก็ตามที่ฉันทดสอบด้วย URL นี้โดยเฉพาะและไม่มีผลลัพธ์ Dunno สิ่งที่ฉันหายไป
slhck

@slhck: Curl ไม่ติดตามการเปลี่ยนเส้นทางโดยค่าเริ่มต้น มันทำกับ-Lสวิตช์
Dennis

@Dennis ไม่ทราบว่าคุณกำลังพูดถึงเรื่องอะไรโดยไม่เห็นความคิดเห็นที่ถูกลบ แต่ใช่ว่าเหมาะสมแล้ว ขอบคุณที่ล้างมัน
slhck

1
คำถามถามเพื่อ wget ไม่ม้วนงอ สิ่งนี้จะไม่ทำงานกับการเปลี่ยนเส้นทางหลายครั้งและตัวเลือก -L
Ligemer

11

รักษาสิ่งนี้ไว้รอบ ๆ เพื่อความสมบูรณ์

ตัวอย่างของคุณควรใช้งานได้จริง รูปแบบถูกต้องและนี่คือภาพหน้าจอที่ฉันเพิ่งแสดงให้เห็นโดยมี GNU แบบเก่าที่ดีwget1.13.4

wget -q some-url -O - | grep something

ดังนั้นรูปแบบของคุณถือว่าเป็นสิ่งที่ผิดและgrepจะส่งออกทุกอย่างมันก็เป็นเพียงแค่


มันอาจเป็นตัวพิมพ์ผิดใน URL ด้วย-qไม่มีข้อผิดพลาด
Dennis


3

หากคุณต้องการที่จะ grep หรือส่วนหัวของท่อพวกเขาเป็นมาตรฐานโดยตรงเพื่อ stderr ดังนั้นคุณต้องเปลี่ยนพวกเขา เช่น:

wget -O - http://example.com/page.php > /dev/null 2>&1 | grep HTTP

2
นี่เป็นวิธีที่ถูกต้องในการทำขอบคุณ!
Udayraj Deshmukh

ดูคำตอบได้ที่นี่ด้วย
Suzana

0

การwgetเขียนผลลัพธ์ที่จะstderr ไม่ไปstdoutดังนั้นหนึ่งต้องเปลี่ยนเส้นทางstderrไปที่stdout:

wget -q -O - url 2&>1 | grep keyword
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.