Tuesday 1 August 2017

Grep no ไบนารี ตัวเลือก


grep - Unix, คำสั่ง Linux Recurse ในไดเร็กทอรีข้ามไฟล์ที่จับคู่ PATTERN ยกเลิกข้อความแสดงข้อผิดพลาดเกี่ยวกับไฟล์ที่ไม่มีอยู่หรือไม่สามารถอ่านได้ บันทึกการพกพา: ไม่เหมือน GNU grep grep แบบดั้งเดิมไม่สอดคล้องกับ POSIX.2 เนื่องจาก grep แบบดั้งเดิมไม่มีตัวเลือก - q และตัวเลือกของ s ทำตัวเหมือน GNU grep rsquos-q ตัวเลือก สคริปต์เชลล์ที่ตั้งใจจะพกพาไปยัง grep แบบดั้งเดิมควรหลีกเลี่ยงทั้ง - q และ - s และควรเปลี่ยนเส้นทางเอาท์พุทไปแทนที่แทน ถือว่าไฟล์เป็นไบนารี โดยค่าเริ่มต้นภายใต้ MS-DOS และ MS-Windows grep จะคาดเดาประเภทไฟล์โดยดูที่เนื้อหาของ 32KB แรกที่อ่านจากไฟล์ ถ้า grep ตัดสินใจว่าไฟล์เป็นไฟล์ข้อความจะเป็นการตัดอักขระ CR จากเนื้อหาของไฟล์ต้นฉบับ (เพื่อให้นิพจน์ปกติทำงานได้อย่างถูกต้อง) การระบุ - U จะตีความการคาดเดานี้ทำให้ไฟล์ทั้งหมดถูกอ่านและส่งผ่านไปยังกลไกการจับคู่คำต่อคำถ้าไฟล์เป็นไฟล์ข้อความที่มีคู่ CRLF ในตอนท้ายของแต่ละบรรทัดการทำเช่นนี้จะทำให้นิพจน์ปกติบางส่วนไม่ทำงาน ตัวเลือกนี้ไม่มีผลต่อแพลตฟอร์มอื่นที่ไม่ใช่ MS-DOS และ MS-Windows รายงานการชดเชยไบต์แบบ Unix สวิตช์นี้ทำให้ grep รายงานการชดเชยไบต์เหมือนกับไฟล์ข้อความในรูปแบบ Unix นั่นคือมีอักขระ CR ที่ถูกถอดออก นี้จะให้ผลลัพธ์เหมือนกับการเรียกใช้ grep บนเครื่อง Unix ตัวเลือกนี้ไม่มีผลใดนอกจากตัวเลือก - b นอกจากนี้ยังไม่มีผลกับแพลตฟอร์มอื่นที่ไม่ใช่ MS-DOS และ MS-Windows พิมพ์หมายเลขเวอร์ชันของ grep เป็นข้อผิดพลาดมาตรฐาน หมายเลขเวอร์ชันนี้ควรรวมอยู่ในรายงานข้อบกพร่องทั้งหมด (ดูด้านล่าง) เปลี่ยนการจับคู่เพื่อเลือกเส้นที่ไม่ตรงกัน เลือกเฉพาะบรรทัดที่มีคำที่ตรงกันซึ่งสร้างทั้งคำ การทดสอบคือสายอักขระการจับคู่ต้องเป็นจุดเริ่มต้นของบรรทัดหรือนำหน้าด้วยอักขระที่ไม่เป็นคำ ในทำนองเดียวกันจะต้องเป็นที่ท้ายบรรทัดหรือตามด้วยอักขระส่วนประกอบที่ไม่ใช่ตัวหนังสือ อักขระที่ประกอบด้วยคำเป็นตัวอักษรตัวเลขและขีดล่าง เลือกเฉพาะการจับคู่ที่ตรงกับทั้งบรรทัดเท่านั้น พ้องเลิกใช้แล้วสำหรับ - i ให้เอาต์พุต zero byte (อักขระ ASCII NUL) แทนอักขระที่ตามชื่อไฟล์ ตัวอย่างเช่น grep-lZ จะแสดงไบต์เป็นศูนย์หลังจากชื่อไฟล์แต่ละไฟล์แทนบรรทัดใหม่ที่ปกติ ตัวเลือกนี้จะทำให้เอาต์พุตไม่คลุมเครือแม้แต่ในที่ที่มีชื่อไฟล์ที่มีอักขระที่ผิดปกติเช่น newlines ตัวเลือกนี้สามารถใช้ได้กับคำสั่งเช่น find - print0 perl -0 sort - z และ xargs -0 เพื่อประมวลผลชื่อไฟล์โดยพลการแม้กระทั่งที่มีอักขระ newline เพื่อค้นหาสตริงที่ระบุในไฟล์เดียว test. sh cat test. sh binbash fun () echo นี่คือการทดสอบ สิ้นสุดสคริปต์เชลล์ของเราด้วยข้อความแสดงข้อผิดพลาดที่สำเร็จ 1 จากทางออก grep ด้านบน: grep exit demofile เมื่อต้องการตรวจสอบสตริงที่ระบุในไฟล์หลายไฟล์: ในกรณีนี้ test. sh และ test1.sh cat test. sh binbash fun () echo นี่คือ ทดสอบ. สิ้นสุดสคริปต์เชลล์ของเราพร้อมกับข้อความแสดงความสำเร็จออก 1 cat test1.sh binbash fun () echo นี่เป็น test1 สิ้นสุดสคริปต์เชลล์ของเราพร้อมกับข้อความแจ้งความสำเร็จ exit 0 grep exit ในไฟล์ทั้งสองไฟล์ test. sh และ test1.sh: test1.sh: exit 0 test. sh: exit 1 เพื่อค้นหาโดยใช้ grep - i เพิ่ม EXIT ใน cat test1.sh test1.sh binbash fun () echo นี่เป็น test1 สิ้นสุดสคริปต์เชลล์ของเราด้วยข้อความความสำเร็จ EXIT with 0 exit 0 grep exit test1.sh test1.sh: exit 0 grep - i ออก test test1.sh: ยกเลิกสคริปต์เชลล์ของเราด้วยข้อความความสำเร็จ EXIT with 0 test1.sh: exit 0 บรรทัดที่สองด้วยตัวเลือก - i เป็นกรณีของ insensitive. grep, egrep, fgrep - พิมพ์เส้นที่ตรงกับรูปแบบคำอธิบาย grep ค้นหาไฟล์ใส่ชื่อ (หรืออินพุตมาตรฐานหากไม่มีไฟล์ชื่อหรือชื่อไฟล์ - จะได้รับ) สำหรับ เส้นที่มีการจับคู่กับ PATTERN ที่ระบุ โดยค่าเริ่มต้น grep จะพิมพ์เส้นที่ตรงกัน นอกจากนี้ยังมีโปรแกรมสองแบบ ได้แก่ egrep และ fgrep Egrep จะเหมือนกับ grep - E Fgrep เหมือนกับ grep - F - NUM - หลังจากบริบท NUM พิมพ์ NUM เส้นท้ายข้อความหลังจากจับคู่สายแล้ว - a. - ไบต์ประมวลผลไฟล์ไบนารีราวกับว่ามันเป็นข้อความที่เทียบเท่ากับไบต์ - ตัวเลือก filestext - B NUM - ก่อนหน้าบริบท NUM พิมพ์ NUM บรรทัดของบริบทชั้นนำก่อนที่จะจับคู่สาย - C NUM, - NUM --context NUM พิมพ์ NUM บรรทัด (ค่าเริ่มต้น 2) ของบริบทผลลัพธ์ - b - byte-offset พิมพ์ไบต์ออฟเซตภายในไฟล์อินพุตก่อนที่แต่ละบรรทัดของผลผลิต - ไบนารีไฟล์ TYPE ถ้าไบต์ไม่กี่ไบต์แรกของไฟล์ระบุว่าไฟล์มีข้อมูลไบนารีสมมติว่าไฟล์นั้นเป็น TYPE ชนิด TYPE เป็นแบบไบนารี และ grep ปกติจะแสดงข้อความหนึ่งบรรทัดว่าไฟล์ไบนารีตรงหรือไม่มีข้อความถ้าไม่มีการจับคู่ หาก TYPE ไม่มีการจับคู่ grep สมมติว่าไฟล์ไบนารีไม่ตรงกับนี้เทียบเท่ากับตัวเลือก - I หาก TYPE เป็นข้อความ grep ประมวลผลไฟล์ไบนารีราวกับว่าข้อความนี้เทียบเท่ากับตัวเลือก - a คำเตือน: grep --binary-filestext สามารถส่งออกไบนารีขยะซึ่งอาจมีผลข้างเคียงที่น่ารังเกียจถ้าเอาท์พุทเป็นเทอร์มินัลและหากไดรเวอร์เทอร์มินัลตีความคำสั่งบางคำเป็นคำสั่ง - c - count ช่วยลดการส่งออกตามปกติแทนพิมพ์จำนวนแถวที่ตรงกันสำหรับแต่ละไฟล์ที่ป้อน กับ - v - เลือกตัวเลือกการจับคู่ (ดูด้านล่าง) นับบรรทัดที่ไม่ตรงกัน - ACTION - ไดเรกทอรีการดำเนินการหากไฟล์อินพุตเป็นไดเรกทอรีให้ใช้ ACTION เพื่อดำเนินการ โดยค่าเริ่มต้น ACTION จะอ่าน ซึ่งหมายความว่าไดเร็กทอรีจะอ่านได้เหมือนกับไฟล์ธรรมดา หาก ACTION ข้ามไป ไดเรกทอรีจะถูกข้ามไปอย่างเงียบ ๆ หาก ACTION ทำซ้ำ grep อ่านไฟล์ทั้งหมดภายใต้แต่ละไดเร็กทอรี recursively ซึ่งเท่ากับตัวเลือก - r - E --extended-regexp ตีความ PATTERN เป็นนิพจน์ทั่วไปแบบขยาย (ดูด้านล่าง) - e PATTERN - regexp PATTERN ใช้รูปแบบเป็นรูปแบบที่เป็นประโยชน์ในการป้องกันรูปแบบที่ขึ้นต้นด้วย - - F --fixed-strings ตีความ PATTERN เป็นรายการสตริงที่ถูกกำหนดโดยคั่นด้วยบรรทัดใหม่ซึ่งส่วนใดก็ตามจะถูกจับคู่ - f FILE --file FILE ได้รับรูปแบบจาก FILE หนึ่งรายการต่อบรรทัด ไฟล์ว่างเปล่ามีรูปแบบเป็นศูนย์และไม่มีอะไรที่เหมือนกัน - G - basal-regexp ตีความ PATTERN เป็นนิพจน์ทั่วไปตามปกติ (ดูด้านล่าง) นี่เป็นค่าเริ่มต้น - H พิมพ์ชื่อไฟล์สำหรับการจับคู่แต่ละครั้ง - h --no-filename ยกเลิกการใส่ชื่อไฟล์บนเอาต์พุตเมื่อค้นหาไฟล์หลายไฟล์ - ช่วยแสดงข้อความช่วยเหลือสั้น ๆ - ประมวลผลไฟล์ไบนารีเป็นถ้าไม่มีข้อมูลการจับคู่นี้เท่ากับตัวเลือก - ไบนารี - ไฟล์ที่ไม่มีการจับคู่ - ผม . --ignore-case ละเว้นความแตกต่างของกรณีทั้งใน PATTERN และไฟล์อินพุต - L --files - โดยปราศจากการจับคู่ปราบปรามเอาท์พุทตามปกติแทนการพิมพ์ชื่อของไฟล์อินพุทแต่ละครั้งซึ่งปกติจะไม่มีการพิมพ์ออกมา การสแกนจะหยุดในการแข่งขันครั้งแรก - l - ไฟล์ที่มีการจับคู่เอาท์พุทปกติแทนการพิมพ์ชื่อของแฟ้มการป้อนข้อมูลแต่ละครั้งที่พิมพ์ออกมาตามปกติจะได้รับการพิมพ์ การสแกนจะหยุดในการแข่งขันครั้งแรก - mmap ถ้าเป็นไปได้ให้ใช้การเรียกระบบ mmap (2) เพื่ออ่านค่า input แทนที่จะเป็นค่าเริ่มต้นของการอ่านระบบ (2) ในบางสถานการณ์ - mmap จะให้ประสิทธิภาพที่ดีขึ้น อย่างไรก็ตาม, --mmap อาจทำให้เกิดการทำงานที่ไม่ได้กำหนด (รวมถึงการทิ้ง core dump) หากไฟล์ input หดตัวขณะที่ grep กำลังทำงานอยู่หรือหากมีข้อผิดพลาดเกี่ยวกับ IO เกิดขึ้น - n - บรรทัดคำนำหน้าแต่ละบรรทัดของผลลัพธ์ที่มีหมายเลขบรรทัดภายในไฟล์อินพุตของมัน - q - เงียบ เงียบเงียบสงบเอาท์พุทปกติ การสแกนจะหยุดในการแข่งขันครั้งแรก ดูตัวเลือก - s หรือ --no-messages ด้านล่าง - r. --recursive อ่านไฟล์ทั้งหมดในแต่ละไดเรคทอรี recursively ซึ่งเทียบเท่ากับตัวเลือก - d recurse - s - ไม่มีข้อความป้องกันข้อความผิดพลาดเกี่ยวกับไฟล์ที่ไม่มีอยู่หรือไม่สามารถอ่านได้ บันทึกการพกพา: ไม่เหมือน GNU grep grep แบบดั้งเดิมไม่สอดคล้องกับ POSIX.2 เนื่องจาก grep แบบดั้งเดิมไม่มีตัวเลือก - q และตัวเลือก - s มีลักษณะเช่น GNU grep s-q option สคริปต์เชลล์ที่ตั้งใจจะพกพาไปยัง grep แบบดั้งเดิมควรหลีกเลี่ยงทั้ง - q และ - s และควรเปลี่ยนเส้นทางเอาท์พุทไปแทนที่แทน - ยู . - ไบต์ใช้แฟ้มไบนารี่ (binary) โดยค่าเริ่มต้นภายใต้ MS-DOS และ MS-Windows grep จะคาดเดาประเภทไฟล์โดยดูที่เนื้อหาของ 32KB แรกที่อ่านจากไฟล์ ถ้า grep ตัดสินใจว่าไฟล์เป็นไฟล์ข้อความจะเป็นการตัดอักขระ CR จากเนื้อหาของไฟล์ต้นฉบับ (เพื่อให้นิพจน์ปกติทำงานได้อย่างถูกต้อง) การระบุ - U จะตีความการคาดเดานี้ทำให้ไฟล์ทั้งหมดถูกอ่านและส่งผ่านไปยังกลไกการจับคู่คำต่อคำถ้าไฟล์เป็นไฟล์ข้อความที่มีคู่ CRLF ในตอนท้ายของแต่ละบรรทัดการทำเช่นนี้จะทำให้นิพจน์ปกติบางส่วนไม่ทำงาน ตัวเลือกนี้ไม่มีผลต่อแพลตฟอร์มอื่นที่ไม่ใช่ MS-DOS และ MS-Windows - ยู . - unix-byte-offsets รายงานการชดเชยไบต์แบบ Unix สวิตช์นี้ทำให้ grep รายงานการชดเชยไบต์เหมือนกับไฟล์ข้อความในรูปแบบ Unix นั่นคือมีอักขระ CR ที่ถูกถอดออก นี้จะให้ผลลัพธ์เหมือนกับการเรียกใช้ grep บนเครื่อง Unix ตัวเลือกนี้ไม่มีผลใดนอกจากตัวเลือก - b นอกจากนี้ยังไม่มีผลกับแพลตฟอร์มอื่นที่ไม่ใช่ MS-DOS และ MS-Windows - V พิมพ์หมายเลขเวอร์ชันของ grep เป็นข้อผิดพลาดมาตรฐาน หมายเลขเวอร์ชันนี้ควรรวมอยู่ในรายงานข้อบกพร่องทั้งหมด (ดูด้านล่าง) - v - ตรงกันข้ามคว่ำความรู้สึกของการจับคู่เพื่อเลือกสายที่ไม่ตรงกัน - w - word-regexp เลือกเฉพาะบรรทัดที่มีคำที่ตรงกันซึ่งสร้างทั้งคำ การทดสอบคือสายอักขระการจับคู่ต้องเป็นจุดเริ่มต้นของบรรทัดหรือนำหน้าด้วยอักขระที่ไม่เป็นคำ ในทำนองเดียวกันจะต้องเป็นที่ท้ายบรรทัดหรือตามด้วยอักขระส่วนประกอบที่ไม่ใช่ตัวหนังสือ อักขระที่ประกอบด้วยคำเป็นตัวอักษรตัวเลขและขีดล่าง - x - line-regexp เลือกเฉพาะคู่ที่ตรงกับทั้งบรรทัดเท่านั้น - y พจน์ที่เลิกใช้สำหรับ - i - Z --null เอาต์พุตเป็นไบต์ศูนย์ (อักขระ ASCII NUL) แทนที่จะใช้อักขระที่ตามชื่อไฟล์ ตัวอย่างเช่น grep-lZ จะแสดงไบต์เป็นศูนย์หลังจากชื่อไฟล์แต่ละไฟล์แทนบรรทัดใหม่ที่ปกติ ตัวเลือกนี้จะทำให้เอาต์พุตไม่คลุมเครือแม้แต่ในที่ที่มีชื่อไฟล์ที่มีอักขระที่ผิดปกติเช่น newlines ตัวเลือกนี้สามารถใช้ได้กับคำสั่งเช่น find - print0 perl -0 sort - z และ xargs -0 เพื่อประมวลผลชื่อไฟล์โดยพลการแม้กระทั่งที่มีอักขระ newline การแสดงออกปกติการแสดงออกปกติเป็นรูปแบบที่อธิบายชุดสตริง นิพจน์ปกติถูกสร้างขึ้นโดยเปรียบเทียบกับนิพจน์เลขคณิตโดยใช้ตัวดำเนินการต่างๆเพื่อรวมนิพจน์ขนาดเล็ก grep เข้าใจนิพจน์ทั่วไปสองรูปแบบ: basic และ extended ใน GNU grep ไม่มีความแตกต่างในฟังก์ชันการทำงานที่ใช้ได้โดยใช้ไวยากรณ์อย่างใดอย่างหนึ่ง ในการใช้งานอื่น ๆ การแสดงออกปกติขั้นพื้นฐานจะมีประสิทธิภาพน้อยลง คำอธิบายต่อไปนี้ใช้กับความแตกต่างของนิพจน์ทั่วไปแบบขยายสำหรับนิพจน์ปกติทั่วไปจะสรุปภายหลัง บล็อคพื้นฐานคือการแสดงออกปกติที่ตรงกับตัวอักษรเดี่ยว ตัวอักษรส่วนใหญ่รวมทั้งตัวอักษรและตัวเลขทั้งหมดเป็นนิพจน์ปกติที่ตรงกับตัวเอง metacharacter ที่มีความหมายพิเศษอาจถูกยกมาโดยก่อนหน้าด้วยเครื่องหมายทับขวา รายการอักขระที่ล้อมรอบด้วยและตรงกับอักขระตัวใดตัวหนึ่งในรายการนั้นถ้าอักขระตัวแรกของรายการเป็นเครื่องหมายคำพูดแล้วจะตรงกับอักขระใด ๆ ที่ไม่อยู่ในรายการ ตัวอย่างเช่นนิพจน์ทั่วไป 0123456789 ตรงกับตัวเลขหลักใด ๆ คุณสามารถระบุอักขระได้หลายอักขระโดยระบุอักขระตัวแรกและตัวสุดท้ายโดยคั่นด้วยยัติภังค์ ในที่สุดมีการกำหนดระดับอักขระที่กำหนดชื่อไว้ล่วงหน้า ชื่อของพวกเขาเป็นตัวอธิบายและพวกเขาคือ: alnum: : alpha:. : cntrl:. : หลัก:. : กราฟ:. : ต่ำกว่า:. : พิมพ์:. : punct:. พื้นที่ว่าง:. ด้านบน:. และ: xdigit :. ตัวอย่างเช่น: alnum: หมายถึง 0-9A-Za-z ยกเว้นรูปแบบหลังขึ้นอยู่กับสถานที่ POSIX และการเข้ารหัสตัวอักษร ASCII ในขณะที่อดีตเป็นอิสระจากชุดสถานที่และตัวอักษร (โปรดสังเกตว่าวงเล็บในชื่อคลาสเหล่านี้เป็นส่วนหนึ่งของชื่อสัญลักษณ์และต้องรวมอยู่ในวงเล็บนอกเหนือจากการคั่นรายการวงเล็บด้วย) ส่วนใหญ่จะสูญเสียความหมายพิเศษภายในรายการ ใส่ชื่อจริงลงในรายการก่อน ในทำนองเดียวกันจะรวมถึงสถานที่ที่แท้จริงได้ทุกที่ แต่ก่อน สุดท้ายเพื่อรวมเป็นตัวอักษรที่สุดท้าย ระยะเวลา ตรงกับอักขระตัวใดตัวหนึ่ง สัญลักษณ์ w เป็นคำพ้องสำหรับ alnum: และ W เป็นคำพ้องสำหรับ alnum เครื่องหมายทับและเครื่องหมายดอลลาร์เป็นเมตาแท็กที่ตรงกับสตริงว่างที่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัด สัญลักษณ์ lt และ gt ตรงกับสตริงว่างที่จุดเริ่มต้นและจุดสิ้นสุดของคำ สัญลักษณ์ b ตรงกับสตริงที่ว่างเปล่าที่ขอบของคำและ B ตรงกับสตริงที่ว่างเปล่าให้ไม่อยู่ที่ขอบของคำ นิพจน์ทั่วไปอาจตามด้วยตัวดำเนินการซ้ำหลาย ๆ ตัว: รายการก่อนหน้านี้จะเป็นตัวเลือกและจับคู่ได้มากที่สุด รายการก่อนหน้าจะตรงกับศูนย์หรือมากกว่าครั้ง รายการก่อนหน้าจะได้รับการจับคู่อย่างน้อยหนึ่งครั้ง n รายการก่อนหน้านี้จะถูกจับคู่ตรง n ครั้ง n, รายการก่อนหน้านี้จะถูกจับคู่ n ครั้งหรือมากกว่า n, m รายการก่อนหน้านี้จับคู่อย่างน้อย n ครั้ง แต่ไม่เกิน m ครั้ง นิพจน์ปกติสองรายการอาจถูกรวมเป็นนิพจน์ทั่วไปที่เกิดขึ้นตรงกับสตริงใด ๆ ที่เกิดขึ้นโดยการรวมสองสตริงย่อยที่ตรงกับการแสดงย่อยย่อยที่ต่อกัน นิพจน์ทั่วไปสองรายการอาจเข้าร่วมโดยผู้ดำเนินการติดตั้งการแสดงออกปกติที่เกิดขึ้นจะจับคู่สตริงที่ตรงกับการแสดงออกย่อยอย่างใดอย่างหนึ่ง การทำซ้ำจะมีความสำคัญเหนือกว่าการแบ่งส่วนซึ่งจะมีความสำคัญเหนือกว่าการสลับ การแสดงออกย่อยทั้งหมดอาจอยู่ในวงเล็บเพื่อแทนที่กฎความสำคัญเหล่านี้ การกลับมาของ n โดยที่ n เป็นตัวเลขเดี่ยวตรงกับสตริงย่อยที่จับคู่ก่อนหน้านี้โดยการแสดงออกย่อยย้ำ n n ในการนิพจน์ปกติ ในการแสดงออกปกติพื้นฐาน metacharacters . . . (. และ) สูญเสียความหมายพิเศษของพวกเขาแทนการใช้รุ่นที่กลับมา . . . (และ) egrep แบบดั้งเดิมไม่สนับสนุน metacharacter และบาง implementations egrep สนับสนุนแทนดังนั้นสคริปต์แบบพกพาควรหลีกเลี่ยงในรูปแบบ egrep และควรใช้เพื่อให้ตรงกับตัวอักษร GNU egrep พยายามสนับสนุนการใช้งานแบบเดิมโดยสมมติว่าไม่ใช่ข้อยกเว้นถ้าเป็นจุดเริ่มต้นของข้อกำหนดช่วงที่ไม่ถูกต้อง ตัวอย่างเช่นคำสั่ง egrep ของเชลล์จะค้นหาสตริงอักขระสองตัวแทนการรายงานข้อผิดพลาดทางไวยากรณ์ในนิพจน์ทั่วไป POSIX.2 อนุญาตการทำงานนี้เป็นส่วนขยาย แต่สคริปต์แบบพกพาควรหลีกเลี่ยง ตัวแปรตัวแปรแวดล้อมนี้ระบุตัวเลือกดีฟอลต์ที่จะวางไว้ด้านหน้าของตัวเลือกที่ชัดเจนใด ๆ ตัวอย่างเช่นถ้า GREPOPTIONS คือ - ไบนารี - ไฟล์ที่ไม่มีการจับคู่ - directoriesskip grep จะทำงานเหมือนตัวเลือกสองตัว - ไฟล์ไบนารี - ไฟล์ไม่ตรงกันและ --directoriesskip ได้รับการระบุก่อนที่จะมีตัวเลือกที่ชัดเจน ข้อมูลจำเพาะของตัวเลือกจะถูกคั่นด้วยช่องว่าง เครื่องหมายแบ็กสแลชจะหนีไปอักขระถัดไปเพื่อให้สามารถใช้เพื่อระบุตัวเลือกที่มีช่องว่างหรือเครื่องหมายทับขวา LCALL LCMESSAGES LANG ตัวแปรเหล่านี้ระบุตำแหน่งที่ตั้งของ LCMESSAGES ซึ่งกำหนดภาษาที่ grep ใช้สำหรับข้อความ ตำแหน่งที่ตั้งจะถูกกำหนดโดยตัวแปรตัวแรกของตัวแปรเหล่านี้ จะใช้ภาษาอังกฤษแบบอเมริกันถ้าไม่มีตัวแปรสภาพแวดล้อมใด ๆ ถูกตั้งค่าไว้หรือถ้าแค็ตตาล็อกข้อความไม่ได้รับการติดตั้งหรือถ้า grep ไม่ได้รับการรวบรวมด้วยการสนับสนุนภาษาประจำชาติ (NLS) LCALL LCCTYPE LANG ตัวแปรเหล่านี้ระบุตำแหน่งที่ตั้งของ LCCTYPE ซึ่งกำหนดประเภทของอักขระเช่น อักขระใดเป็นช่องว่าง ตำแหน่งที่ตั้งจะถูกกำหนดโดยตัวแปรตัวแรกของตัวแปรเหล่านี้ ตำแหน่งที่ตั้ง POSIX ถูกใช้ถ้าไม่มีตัวแปรสภาพแวดล้อมเหล่านี้ถูกตั้งค่าไว้หรือถ้าไม่มีการติดตั้งแค็ตตาล็อกของโลแคลไว้หรือถ้า grep ไม่ได้รับการคอมไพล์ด้วยการสนับสนุนภาษาประจำชาติ (NLS) POSIXLYCORRECT ถ้าตั้งไว้ grep จะทำงานตามที่ POSIX.2 กำหนดไว้เป็นอย่างอื่น grep จะทำงานเหมือนกับโปรแกรม GNU อื่น ๆ POSIX.2 กำหนดให้ตัวเลือกที่เป็นไปตามชื่อไฟล์ต้องถือว่าเป็นชื่อไฟล์โดยค่าเริ่มต้นตัวเลือกดังกล่าวจะถูกปรับเปลี่ยนให้อยู่ด้านหน้าของรายการตัวถูกดำเนินการและจะถือว่าเป็นตัวเลือก นอกจากนี้ POSIX.2 ยังกำหนดให้ตัวเลือกที่ไม่รู้จักเป็นข้อผิดพลาด แต่เนื่องจากไม่ผิดกฎหมายจริงๆค่าดีฟอลต์คือการวินิจฉัยว่าไม่ถูกต้อง POSIXLYCORRECT ยังปิดใช้งาน N GNUnonoptionargvflags ด้วย อธิบายไว้ด้านล่าง. N GNUnonoptionargvflags (นี่ n เป็นรหัสกระบวนการตัวเลข grep) ถ้าอักขระ i th ของตัวแปรสภาพแวดล้อมนี้มีค่าเท่ากับ 1 อย่าพิจารณาโอเปอเรเตอร์ grep ของ i th เป็นตัวเลือกแม้ว่าจะดูเหมือนเป็นหนึ่ง เปลือกสามารถใส่ตัวแปรนี้ในสภาพแวดล้อมสำหรับคำสั่งแต่ละคำที่มันทำงานโดยระบุ operands ที่เป็นผลลัพธ์ของการขยาย wildcard ของชื่อไฟล์ดังนั้นจึงไม่ควรถือว่าเป็นตัวเลือก ลักษณะการทำงานนี้จะใช้ได้เฉพาะกับไลบรารี GNU C และเฉพาะเมื่อ POSIXLYCORRECT ไม่ได้ตั้งไว้ การวินิจฉัยโดยปกติสถานะทางออกคือ 0 หากพบข้อมูลที่ตรงกันและ 1 หากไม่พบข้อมูลที่ตรงกัน (ตัวเลือก - v จะเปลี่ยนความรู้สึกของสถานะออก) สถานะการออกคือ 2 หากมีข้อผิดพลาดทางไวยากรณ์ในรูปแบบไฟล์ข้อมูลที่ไม่สามารถเข้าถึงได้หรือข้อผิดพลาดของระบบอื่น ๆ รายงานข้อผิดพลาดทางอีเมลไปที่ bug-gnu-utilsgnu. org อย่าลืมรวมคำว่า grep ไว้ที่ไหนสักแห่งในฟิลด์ Subject: การนับซ้ำขนาดใหญ่ใน m, n construct อาจทำให้ grep ใช้หน่วยความจำจำนวนมาก นอกจากนี้การแสดงออกปกติบางอย่างที่คลุมเครืออื่น ๆ ยังต้องใช้เวลาและช่องว่างที่เป็นลางและอาจทำให้ grep ทำงานไม่ออก Backreferences ทำงานได้ช้ามากและอาจจำเป็นต้องใช้เวลาที่ระบุไว้ในลินุกซ์ Linux และ Unix grep คำสั่ง grep ซึ่งย่อมาจากการพิมพ์นิพจน์ปกติทั่วโลกประมวลผลบรรทัดข้อความตามบรรทัดและพิมพ์บรรทัดใด ๆ ที่ตรงกับรูปแบบที่ระบุ ไวยากรณ์ grep grep เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการจับคู่นิพจน์ทั่วไปกับข้อความในไฟล์หลายไฟล์หรือสตรีมข้อมูล จะค้นหาคำว่า PATTERN ของข้อความที่คุณระบุในบรรทัดคำสั่งและแสดงผลลัพธ์ให้กับคุณ ตัวอย่างการใช้งานสมมติว่าต้องการค้นหาวลีผลิตภัณฑ์ของเราในไฟล์ HTML บนเครื่องของคุณอย่างรวดเร็ว ให้เริ่มด้วยการค้นหาไฟล์เดียว ที่นี่เครื่องรางของเราคือผลิตภัณฑ์ของเราและ FILE ของเราคือ product-listing. html พบบรรทัดเดียวที่มีรูปแบบของเราและ grep จะแสดงสายการจับคู่ทั้งหมดไปยังเทอร์มินัล บรรทัดมีความยาวมากกว่าความกว้างของเทอร์มินัลดังนั้นข้อความจึงมีความยาวประมาณบรรทัดต่อไปนี้ แต่ผลลัพธ์นี้ตรงกับบรรทัดเดียวในไฟล์ของเรา หมายเหตุ: PATTERN ถูกแปลโดย grep เป็นนิพจน์ทั่วไป ในตัวอย่างข้างต้นอักขระทั้งหมดที่เราใช้ (ตัวอักษรและเว้นวรรค) ถูกตีความตามตัวอักษรในนิพจน์ปกติดังนั้นจะต้องจับคู่วลีที่ตรงทั้งหมดเท่านั้น อักขระอื่น ๆ มีความหมายพิเศษเช่น mdash เครื่องหมายวรรคตอนบางอย่างเช่น สำหรับข้อมูลเพิ่มเติมโปรดดูการอ้างอิงด่วนของนิพจน์ทั่วไป การดูผลลัพธ์ grep ในสีถ้าเราใช้ตัวเลือกสีการจับคู่ที่ประสบความสำเร็จของเราจะเน้นสำหรับเรา: การดูหมายเลขบรรทัดของการจับคู่ที่ประสบความสำเร็จจะเป็นประโยชน์มากยิ่งขึ้นหากเราทราบว่าบรรทัดที่ตรงกันปรากฏในไฟล์ของเรา ถ้าเราระบุตัวเลือก - n, grep จะนำหน้าแต่ละบรรทัดที่ตรงกันกับหมายเลขบรรทัด: บรรทัดการจับคู่ของเรามีคำนำหน้าด้วย 18: ซึ่งบอกเราว่านี่เป็นบรรทัดที่ 18 ในไฟล์ของเรา การดำเนินการค้นหา grep แบบไม่คำนึงถึงตัวพิมพ์ใหญ่กรณีที่ผลิตภัณฑ์ของเราปรากฏที่จุดเริ่มต้นของประโยคหรือปรากฏเป็นตัวพิมพ์ใหญ่ทั้งหมดเราสามารถระบุตัวเลือก - i เพื่อดำเนินการจับคู่แบบไม่คำนึงถึงตัวพิมพ์ใหญ่: การใช้ตัวเลือก - i, grep จะค้นหาการจับคู่บนบรรทัด 23 ด้วย การค้นหาไฟล์หลายไฟล์โดยใช้สัญลักษณ์แทนถ้าเรามีไฟล์หลายไฟล์เพื่อค้นหาเราสามารถค้นหาไฟล์ทั้งหมดได้โดยใช้สัญลักษณ์แทนในชื่อไฟล์ของเรา แทนการระบุ product-listing. html เราสามารถใช้เครื่องหมายดอกจัน () และ. html ได้ เมื่อคำสั่งถูกเรียกใช้เปลือกจะขยายเครื่องหมายดอกจันไปยังชื่อของไฟล์ใด ๆ ที่พบ (ภายในไดเรกทอรีปัจจุบัน) ซึ่งลงท้ายด้วย. html สังเกตว่าแต่ละบรรทัดเริ่มต้นด้วยไฟล์เฉพาะที่ตรงกับที่เกิดขึ้น recursively ค้นหาไดเรกทอรีย่อยเราสามารถขยายการค้นหาของเราไปยังไดเรกทอรีย่อยและไฟล์ใด ๆ ที่พวกเขามีการใช้ตัวเลือก - r ซึ่งบอก grep เพื่อดำเนินการค้นหาอย่าง recursively ให้เปลี่ยนชื่อไฟล์ของเราเป็นเพียงเครื่องหมายดอกจัน () เพื่อให้ตรงกับชื่อไฟล์หรือไดเรกทอรีใด ๆ และไม่ใช่เฉพาะไฟล์ HTML: ซึ่งจะทำให้เรามีการแข่งขันเพิ่มขึ้นสามรายการ ขอให้สังเกตว่าชื่อไดเร็กทอรีถูกรวมไว้สำหรับไฟล์ที่ตรงกันทั้งหมดที่ไม่ได้อยู่ในไดเร็กทอรีปัจจุบัน การใช้นิพจน์ปกติเพื่อทำการค้นหาที่มีประสิทธิภาพมากขึ้นพลังที่แท้จริงของ grep คือสามารถใช้เพื่อให้ตรงกับนิพจน์ทั่วไปได้ (Thats สิ่งที่อยู่ใน grep หมายถึง) นิพจน์ปกติใช้อักขระพิเศษในสตริง PATTERN เพื่อจับคู่สตริงที่กว้างขึ้น ให้ดูตัวอย่างง่ายๆ สมมติว่าคุณต้องการค้นหาวลีที่คล้ายคลึงกับผลิตภัณฑ์ของเราในไฟล์ HTML ของคุณทุกครั้ง แต่วลีนี้ควรเริ่มด้วยผลิตภัณฑ์ของเราและสิ้นสุดด้วยผลิตภัณฑ์ เราสามารถระบุรูปแบบนี้แทนได้ดังนี้: ผลิตภัณฑ์ของเรา ในนิพจน์ทั่วไปช่วง (.) จะแปลเป็นอักขระตัวแทนเดียว หมายถึงอักขระใด ๆ ที่ปรากฏในที่นี้จะตรงกัน เครื่องหมายดอกจัน () หมายถึงอักขระก่อนหน้าซึ่งปรากฏเป็นศูนย์หรือมากกว่าหนึ่งครั้งจะตรงกับ ดังนั้นการรวมกัน จะตรงกับตัวอักษรใด ๆ ตัวอย่างเช่นผลิตภัณฑ์ที่น่าตื่นตาตื่นใจของเราผลิตภัณฑ์ของเราที่ดีที่สุดและแม้แต่ผลิตภัณฑ์ของเราจะตรงกับ เนื่องจากระบุตัวเลือก - i ผลิตภัณฑ์ของเราและ OuRpRoDuCtS จะเข้ากันได้ดี ให้เรียกใช้คำสั่งด้วยนิพจน์ทั่วไปนี้และดูว่าเราสามารถรับอะไรเพิ่มเติมได้ที่นี่เรายังได้คำหลักจากวลีผลิตภัณฑ์ที่ดีของเรา grep เป็นเครื่องมือที่มีประสิทธิภาพซึ่งสามารถช่วยให้คุณทำงานกับไฟล์ข้อความและจะได้รับประสิทธิภาพมากยิ่งขึ้นเมื่อคุณรู้สึกสบายใจเมื่อใช้การแสดงผลปกติ คำอธิบายทางเทคนิค grep จะค้นหาอินพุตที่ระบุชื่อ FILE s (หรืออินพุตมาตรฐานหากไม่มีชื่อไฟล์หรือหากมีการใส่เครื่องหมายเดียว (-) เป็นชื่อไฟล์) สำหรับบรรทัดที่มีการจับคู่กับ PATTERN ที่ระบุ โดยค่าเริ่มต้น grep จะพิมพ์เส้นที่ตรงกัน นอกจากนี้ยังมีโปรแกรม variant egrep สามชุด fgrep และ rgrep มีอยู่: egrep ทำงานเหมือนกับ grep - E ในโหมดนี้ grep จะประเมินสตริง PATTERN ของคุณเป็นนิพจน์ปกติที่ขยาย (ERE) ปัจจุบันนี้ ERE ไม่ได้ให้ผลเกินกว่าการแสดงออกปกติทั่วไป แต่ก็ยังมีประโยชน์อยู่ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับนิพจน์ทั่วไปแบบขยายให้ดูที่นิพจน์ทั่วไปที่ใช้กับนิพจน์ทั่วไปที่ขยาย ด้านล่าง fgrep เหมือนกับการรัน grep - F ในโหมดนี้ grep จะประเมินสตริงการเขียนแบบเป็นสตริงถาวร mdash อักขระทุกตัวในสตริงจะได้รับการปฏิบัติอย่างแท้จริง ตัวอย่างเช่นถ้าสตริงของคุณประกอบด้วยเครื่องหมายดอกจัน () grep จะพยายามจับคู่กับเครื่องหมายดอกจันจริงแทนที่จะแปลความหมายนี้แทนอักขระตัวแทน ถ้าสตริงของคุณมีหลายบรรทัด (ถ้ามีบรรทัดใหม่) แต่ละบรรทัดจะถือว่าเป็นสตริงที่กำหนดและทุกคนสามารถเรียกใช้การจับคู่ได้ rgrep เหมือนกับการรัน grep - r ในโหมดนี้ grep จะทำการค้นหาซ้ำ หากพบไฟล์ไดเรกทอรีจะเป็นการสำรวจในไดเรกทอรีนั้นและดำเนินการค้นหาต่อ (การเชื่อมโยงสัญลักษณ์จะถูกละเว้นหากคุณต้องการค้นหาไดเรกทอรีที่มีการเชื่อมโยงแบบสัญลักษณ์คุณควรใช้ตัวเลือก - R แทน) ในระบบปฏิบัติการที่เก่ากว่าเช่น egrep fgrep และ rgrep เป็นโปรแกรมที่แตกต่างกับ exectuables ของตัวเอง ในระบบที่ทันสมัยเหล่านี้ชื่อคำสั่งพิเศษเป็นทางลัดเพียงเพื่อ grep กับธงที่เหมาะสมเปิดการใช้งาน มีฟังก์ชันเทียบเท่า ตัวเลือกทั่วไปพิมพ์ข้อความช่วยเหลือสั้น ๆ สรุปตัวเลือกบรรทัดคำสั่งและออก ถ้าเป็นไปได้ให้ใช้การเรียกระบบ mmap เพื่ออ่านข้อมูลเข้าแทนการเริ่มต้นระบบการอ่านค่าดีฟอลต์ ในบางสถานการณ์ - mmap จะให้ประสิทธิภาพที่ดีขึ้น อย่างไรก็ตาม, --mmap อาจทำให้เกิดการทำงานที่ไม่ได้กำหนด (รวมถึงการทิ้ง core dump) หากไฟล์ input หดตัวขณะที่ grep กำลังทำงานอยู่หรือหากมีข้อผิดพลาดเกี่ยวกับ IO เกิดขึ้น ถือว่าไฟล์เป็นไบนารี โดยค่าเริ่มต้นภายใต้ MS-DOS และ MS-Windows grep จะคาดเดาประเภทไฟล์โดยดูที่เนื้อหาของ 32KB แรกที่อ่านจากไฟล์ ถ้า grep ตัดสินใจว่าไฟล์เป็นไฟล์ข้อความจะเป็นการตัดอักขระ CR จากเนื้อหาของไฟล์ต้นฉบับ (เพื่อให้นิพจน์ปกติทำงานได้อย่างถูกต้อง) การระบุ - U จะตีความการคาดเดานี้ทำให้ไฟล์ทั้งหมดถูกอ่านและส่งผ่านไปยังกลไกการจับคู่คำต่อคำถ้าไฟล์เป็นไฟล์ข้อความที่มีคู่ CRLF ในตอนท้ายของแต่ละบรรทัดการทำเช่นนี้จะทำให้นิพจน์ปกติบางส่วนไม่ทำงาน ตัวเลือกนี้ไม่มีผลต่อแพลตฟอร์มอื่นที่ไม่ใช่ MS-DOS และ MS-Windows รักษาข้อมูลอินพุทเป็นชุดของเส้นแต่ละสายจะถูกยกเลิกโดยไบต์ศูนย์ (อักขระ ASCII NUL) แทนบรรทัดใหม่ เช่นเดียวกับตัวเลือก - Z หรือ --null ตัวเลือกนี้สามารถใช้กับคำสั่งเช่น sort - z เพื่อประมวลผลชื่อไฟล์โดยพลการ นิพจน์ทั่วไปการแสดงออกปกติเป็นรูปแบบที่อธิบายชุดสตริง นิพจน์ปกติถูกสร้างขึ้นโดยเปรียบเทียบกับนิพจน์เลขคณิตโดยใช้ตัวดำเนินการต่างๆเพื่อรวมนิพจน์ขนาดเล็ก grep เข้าใจรูปแบบการแสดงออกปกติสามรูปแบบ: quotbasicquot (BRE), quotextendedquot (ERE) และ quotperlquot (PRCE) ใน GNU grep ไม่มีความแตกต่างระหว่างฟังก์ชันการทำงานที่มีอยู่ระหว่างไวยากรณ์พื้นฐานและแบบขยาย ในการใช้งานอื่น ๆ การแสดงออกปกติขั้นพื้นฐานจะมีประสิทธิภาพน้อยลง คำอธิบายต่อไปนี้ใช้กับความแตกต่างของนิพจน์ทั่วไปแบบขยายสำหรับนิพจน์ปกติทั่วไปจะสรุปภายหลัง นิพจน์ปกติของ Perl มีฟังก์ชันเพิ่มเติม บล็อคพื้นฐานคือการแสดงออกปกติที่ตรงกับตัวอักษรเดี่ยว ตัวอักษรส่วนใหญ่รวมทั้งตัวอักษรและตัวเลขทั้งหมดเป็นนิพจน์ปกติที่ตรงกับตัวเอง อาจมีการอ้างถึงเมตาแท็กที่มีความหมายพิเศษใด ๆ โดยก่อนหน้าด้วยเครื่องหมายแบ็กสแลช ช่วงเวลา (.) ตรงกับอักขระตัวใดตัวหนึ่ง คลาสตัวอักษรและนิพจน์วงเล็บการแสดงออกของวงเล็บคือรายการอักขระที่ล้อมรอบด้วยและ ตรงกับอักขระตัวใดตัวหนึ่งในรายการนั้นถ้าอักขระตัวแรกของรายการเป็นเครื่องหมายคำพูดแล้วจะตรงกับอักขระใด ๆ ที่ไม่อยู่ในรายการ ตัวอย่างเช่นนิพจน์ทั่วไป 0123456789 ตรงกับตัวเลขหลักใด ๆ ในการแสดงออกวงเล็บการแสดงช่วงจะมีอักขระสองตัวคั่นด้วยยัติภังค์ มันตรงกับตัวอักษรใด ๆ ที่เรียงลำดับระหว่างสองตัวอักษรรวมถึงการใช้สถานที่จัดลำดับและชุดอักขระ ตัวอย่างเช่นในตำแหน่ง C ที่เป็นค่าดีฟอลต์ a-d จะเท่ากับ abcd หลายภาษาจัดเรียงตัวอักษรในคำสั่งของพจนานุกรมและในตำแหน่งที่ตั้งเหล่านี้ a-d โดยปกติจะไม่เทียบเท่ากับ abcd อาจเทียบเท่ากับ aBcCdd ตัวอย่างเช่น. คุณสามารถใช้ตำแหน่งที่ตั้ง C โดยการตั้งค่าตัวแปรสภาพแวดล้อม LCALL เป็นค่า C เพื่อให้ได้การตีความวงเล็บแบบเดิม ในที่สุดบางตัวที่มีชื่อของอักขระจะถูกกำหนดไว้ล่วงหน้าภายในการแสดงผลวงเล็บดังนี้ ชื่อของพวกเขาเป็นตัวอธิบายและพวกเขาคือ: alnum: : alpha:. : cntrl:. : หลัก:. : กราฟ:. : ต่ำกว่า:. : พิมพ์:. : punct:. พื้นที่ว่าง:. ด้านบน:. และ: xdigit:. ตัวอย่างเช่น: alnum: หมายถึงคลาสอักขระของตัวเลขและตัวอักษรในโลแคลปัจจุบัน ใน C locale และ ASCII character set encoding นี่เหมือนกับ 0-9A-Za-z (โปรดสังเกตว่าวงเล็บในชื่อชั้นเหล่านี้เป็นส่วนหนึ่งของชื่อสัญลักษณ์และต้องรวมอยู่ในวงเล็บนอกเหนือจากการกำหนดนิพจน์วงเล็บ) ส่วนใหญ่อักขระเมตาจะสูญเสียความหมายพิเศษในการแสดงออกของวงเล็บ ใส่ชื่อจริงลงในรายการก่อน ในทำนองเดียวกันจะรวมถึงสถานที่ที่แท้จริงได้ทุกที่ แต่ก่อน ท้ายสุดรวมตัวอักษร -. วางไว้ล่าสุด เครื่องหมายทับและเครื่องหมายดอลลาร์เป็นเมตาดาต้าที่ตรงกับสตริงว่างที่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัด อักขระเครื่องหมายทับขวาและนิพจน์พิเศษสัญลักษณ์ lt และ gt แต่ละส่วนจะตรงกับสตริงที่ว่างเปล่าในตอนต้นและตอนท้ายของคำ สัญลักษณ์ b ตรงกับสตริงที่ว่างเปล่าที่ขอบของคำและ B ตรงกับสตริงที่ว่างเปล่าให้ไม่อยู่ที่ขอบของคำ สัญลักษณ์ w เป็นคำพ้องสำหรับ alnum: และ W เป็นคำพ้องสำหรับ alnum: การทำซ้ำการแสดงออกปกติอาจตามด้วยตัวดำเนินการซ้ำซ้อนหลายตัว:

No comments:

Post a Comment