ค้นหารูปแบบข้อความใน linux


20

ฉันเป็นลินุกซ์มือใหม่ ฉันต้องการค้นหาสตริง "teststring" ในไฟล์ * .java ทั้งหมดที่อยู่ภายใต้ / home / user1 / (รวมถึงโฟลเดอร์ย่อย) ฉันจะทำมันใน linux ผ่านคำสั่งเชลล์


มีคำถามมากมายเกี่ยวกับการค้นหาไฟล์ regex ในไดเรกทอรีย่อยจากบรรทัดคำสั่ง
RobotHumans

การค้นหาอย่างรวดเร็วปรากฏคำถามนี้: superuser.com/questions/208271/ …ไม่ตรงกับสิ่งที่คุณกำลังมองหา แต่แทนที่จะเป็น exec cp คุณสามารถแมว / grep อะไรก็ได้
RobotHumans

ฉันสามารถแสดงรายการไฟล์ที่มีนามสกุลด้วย find / home / user1 -name * .java วิธีการใช้ grep ในนั้น?
darthvader

คำตอบ:


23

วิธีที่ง่ายที่สุดคือการใช้คุณสมบัติของ GNU grep:

grep -r --include '*.java' teststring /home/user1

หากคุณเคยใช้งานยูนิกซ์รุ่นอื่นที่ไม่มี grep GNU นี่เป็นวิธีพกพา:

find /home/user1 -name '*.java' -exec grep teststring {} +

ที่ดีไม่ทราบเกี่ยวกับคุณสมบัติ grep นี้
RobotHumans

1
หากคุณกำลังค้นหาไฟล์ปัจจุบันและไฟล์ทั้งหมดgrep -r teststring .
Chris Moschini


4

สำหรับแอ๊กนี้aka aka -grepแอพนักฆ่าในใจของฉัน;)

คุณสามารถack some_string /in/path_yหาsome_stringในpath_y หรือง่ายกว่าที่ack some_other_stringจะหา some_other_sting ใน dir ปัจจุบัน


2

พบมัน โพสต์มันอาจช่วยคนได้

find /home/user01 -name *.java | xargs grep "teststring"

โปรดแก้ไขหากมีวิธีที่ดีกว่านี้


3
โดยทั่วไปคุณควรใช้-print0และ-0เมื่อไพพ์findเข้าxargsทำงานอย่างถูกต้องกับไฟล์ที่อาจมีช่องว่างหรือบรรทัดใหม่ในชื่อของพวกเขา:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
หยุดชั่วคราวจนกว่าจะมีประกาศ

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