ผมอยากเดินผ่านบนความแตกต่างระหว่างgrep
, pgrep
, egrep
และfgrep
และวิธีการที่ฉันจะใช้พวกเขา
ผมอยากเดินผ่านบนความแตกต่างระหว่างgrep
, pgrep
, egrep
และfgrep
และวิธีการที่ฉันจะใช้พวกเขา
คำตอบ:
grep เป็นตัวย่อที่ย่อมาจาก "Global Regular Expressions Print" grep เป็นโปรแกรมที่สแกนไฟล์หรือไฟล์ที่ระบุทีละบรรทัดบรรทัดที่ส่งคืนที่มีรูปแบบ รูปแบบคือนิพจน์ที่ระบุชุดของสตริงโดยการตีความอักขระเป็นเมตาอักขระ ตัวอย่างเช่นอักขระเครื่องหมายดอกจัน (*) ถูกตีความว่าเป็นความหมาย "ศูนย์หรือมากกว่าขององค์ประกอบก่อนหน้า" สิ่งนี้ทำให้ผู้ใช้สามารถพิมพ์ชุดอักขระสั้น ๆ และอักขระเมตาลงในคำสั่ง grep เพื่อให้คอมพิวเตอร์แสดงให้เราเห็นว่าบรรทัดไหนที่ไฟล์ตรงกัน
คำสั่ง grep มาตรฐานดูเหมือนว่า:
grep <flags> '<regular expression>' <filename>
grep พิมพ์ผลการค้นหาไปที่หน้าจอ (stdout) และส่งคืนค่าออกต่อไปนี้:
0 A match was found.
1 No match was found.
>1 A syntax error was found or a file was inaccessible
(even if matches were found).
บางธงทั่วไป: -c
สำหรับการนับจำนวนของการแข่งขันที่ประสบความสำเร็จและไม่พิมพ์การแข่งขันที่เกิดขึ้นจริง-i
ในการทำกรณีการค้นหาตาย-n
ในการพิมพ์หมายเลขบรรทัดก่อนการแข่งขันแต่ละงานพิมพ์, -v
จะใช้ส่วนประกอบของการแสดงออกปกติ (เช่นกลับสายที่ ไม่ตรงกัน) และ-l
เพื่อพิมพ์ชื่อไฟล์ของไฟล์ด้วยบรรทัดที่ตรงกับนิพจน์
egrep เป็นตัวย่อที่ย่อมาจาก "Extended Global Expressions Print"
'E' ใน egrep หมายถึงถือว่ารูปแบบเป็นนิพจน์ปกติ "นิพจน์ทั่วไปแบบขยาย" ตัวย่อ 'ERE' ถูกเปิดใช้งานใน egrep egrep (ซึ่งเป็นเช่นเดียวกับgrep -E
) ขนม+
, ?
, |
, (
และ)
เป็นตัวละครเมตา
ในการแสดงออกขั้นพื้นฐานปกติ (มี grep), ตัวละครเมตา?
, +
, {
, |
, (
และ)
สูญเสียความหมายพิเศษของพวกเขา หากคุณต้องการ grep ในการรักษาตัวละครเหล่านี้เป็นตัวละคร-เมตาหลบหนีพวกเขา \?
, \+
, \{
, \|
, และ \(
\)
ตัวอย่างเช่น grep ที่นี่ใช้นิพจน์ปกติพื้นฐานโดยที่เครื่องหมายบวกถือว่าเป็นจริงบรรทัดใด ๆ ที่มีเครื่องหมายบวกจะถูกส่งคืน
grep "+" myfile.txt
egrep ในทางกลับกันถือว่า "+" เป็นอักขระเมตาและส่งกลับทุกบรรทัดเนื่องจากเครื่องหมายบวกถูกตีความว่าเป็น "หนึ่งครั้งหรือมากกว่า"
egrep "+" myfile.txt
ที่นี่ทุกบรรทัดจะถูกส่งคืนเนื่องจาก+
ถูกจัดการโดย egrep เป็นอักขระเมตา grep ปกติจะค้นหาเฉพาะบรรทัดที่มีตัวอักษร+
เท่านั้น
fgrep เป็นตัวย่อที่ย่อมาจาก "การพิมพ์นิพจน์ทั่วไปทั่วโลกคงที่สตริง"
fgrep (ซึ่งเป็นเช่นเดียวกับ grep -F) ได้รับการแก้ไขหรือรวดเร็ว grep และทำงานเป็น grep แต่ไม่รู้จักการแสดงออก meta-อักขระปกติใด ๆ ว่าเป็นพิเศษ การค้นหาจะเสร็จเร็วขึ้นเพราะจะประมวลผลสตริงธรรมดาแทนที่จะเป็นรูปแบบที่ซับซ้อน
ตัวอย่างเช่นหากฉันต้องการค้นหา. bash_profile สำหรับจุดตามตัวอักษร (.) การใช้ grep จะเป็นเรื่องยากเพราะฉันจะต้องหลบหนีจุดเนื่องจากจุดนั้นเป็นอักขระเมตาที่หมายถึง 'wild-card ตัวอักษรใด ๆ ':
grep "." myfile.txt
คำสั่งดังกล่าวส่งคืน myfile.txt ทุกบรรทัด ทำสิ่งนี้แทน:
fgrep "." myfile.txt
จากนั้นเฉพาะบรรทัดที่มีตัวอักษร '' ' ในพวกเขาจะถูกส่งกลับ fgrep ช่วยให้เราไม่ต้องหลบหนีจากตัวละครเมตาดาต้าของเรา
pgrep เป็นตัวย่อที่ย่อมาจาก "ID กระบวนการพิมพ์นิพจน์ทั่วไปทั่วโลก"
pgrep จะค้นหากระบวนการที่กำลังทำงานอยู่และแสดง ID กระบวนการที่ตรงกับเกณฑ์การเลือกไปยัง stdout pgrep มีประโยชน์เมื่อสิ่งที่คุณต้องการทราบคือจำนวนเต็ม id กระบวนการของกระบวนการ ตัวอย่างเช่นถ้าฉันต้องการทราบเฉพาะ ID กระบวนการของกระบวนการ mysql ของฉันฉันจะใช้คำสั่งpgrep mysql
ซึ่งจะส่งคืน ID กระบวนการเช่น 7312
pgrep
คู่มือ : ชื่อกระบวนการที่ใช้สำหรับการจับคู่จะถูก จำกัด 15 ตัวอักษรที่มีอยู่ในการส่งออกของ/ proc / pid / สถิติ ใช้ตัวเลือก -f เพื่อให้ตรงกับบรรทัดคำสั่งที่สมบูรณ์/ proc / pid / cmdline