[ อ่านต่อ | คู่มือผู้ใช้ | การจัดทำดัชนี | เกณฑ์มาตรฐาน | ถามตอบ ]
ตัวเลือก -Q เปิดแบบสอบถาม TUI เพื่อค้นหาไฟล์ในขณะที่คุณพิมพ์!
ugrep นั้นรวดเร็ว ใช้งานง่าย และมาพร้อมกับฟีเจอร์ใหม่ๆ มากมายที่ผู้ใช้ต้องการ
รวม TUI แบบโต้ตอบพร้อมความช่วยเหลือในตัว การค้นหาแบบ Google ที่มีรูปแบบ AND/OR/NOT การค้นหาแบบคลุมเครือ การค้นหา (ซ้อนกัน) zip/7z/tar/pax/cpio archives tarballs และไฟล์บีบอัด gz/Z/bz/ bz2/lzma/xz/lz4/zstd/brotli, ค้นหาและไฟล์ไบนารี hexdump, ค้นหาเอกสารเช่น PDF, doc, docx และเอาต์พุตใน JSON, XML, CSV หรือรูปแบบที่คุณกำหนดเอง
ไวยากรณ์รูปแบบ regex แบบขยาย Unicode พร้อมการจับคู่รูปแบบหลายบรรทัดโดยไม่ต้องใช้ตัวเลือกบรรทัดคำสั่งพิเศษ
รวมถึงตัวสร้างดัชนีไฟล์เพื่อเพิ่มความเร็วในการค้นหาระบบไฟล์ที่ช้าและเย็น
การแทนที่แบบดรอปอินที่แท้จริงสำหรับ GNU grep (สมมติว่าคุณคัดลอกหรือเชื่อมโยง ug
ไปยัง grep
และเพื่อ egrep
และ fgrep
) ซึ่งแตกต่างจาก grep ยอดนิยมอื่น ๆ ที่อ้างว่าเป็น "ทางเลือก grep" หรือ "การแทนที่" เมื่อสิ่งเหล่านั้นใช้บรรทัดคำสั่งที่เข้ากันไม่ได้จริง ตัวเลือกและใช้ตัวจับคู่ regex ที่เข้ากันไม่ได้ เช่น Perl regex เท่านั้นกับ POSIX BRE (grep) และ ERE (egrep) เมื่อ ugrep รองรับ regex ทั้งหมด โหมด
การวัดประสิทธิภาพแสดงให้เห็นว่า ugrep เป็น (หนึ่งใน) grep ที่เร็วที่สุดโดยใช้ RE/flex regex matcher ที่ใช้ DFA ประสิทธิภาพสูง
หากควรปรับปรุงหรือเพิ่มสิ่งใดใน ugrep โปรดแจ้งให้เราทราบ!
ลำดับความสำคัญอันดับ 1 คือการประกันคุณภาพเพื่อให้แน่ใจว่า ugrep ไม่มีข้อบกพร่องและเชื่อถือได้
ทำให้ ugrep ทำงานเร็วขึ้นอีก ดูตัวอย่าง #432, #421
แบ่งปันผลลัพธ์ประสิทธิภาพที่สามารถทำซ้ำได้
ug
มีไว้สำหรับการใช้งานแบบโต้ตอบ ซึ่งจะโหลดไฟล์การกำหนดค่า .ugrep เสริมพร้อมการตั้งค่าของคุณที่อยู่ในไดเร็กทอรีการทำงานหรือโฮมไดเร็กตอรี่ นอกจากนี้ ug+
ยังค้นหาไฟล์ PDF, เอกสาร, e-books, ข้อมูลเมตาของรูปภาพด้วย
ugrep
สำหรับการใช้งานเป็นกลุ่ม เช่น GNU grep ที่ไม่มีไฟล์การกำหนดค่า .ugrep นอกจากนี้ ugrep+
ยังค้นหาไฟล์ PDF, เอกสาร, e-books, ข้อมูลเมตาของรูปภาพ
จับคู่รูปแบบ Unicode ตามค่าเริ่มต้นและค้นหาไฟล์ที่เข้ารหัส UTF-8, UTF-16 และ UTF-32 โดยอัตโนมัติ
จับคู่หลายบรรทัดด้วย n
หรือ R
ในรูปแบบ regex ไม่จำเป็นต้องมีตัวเลือกพิเศษในการทำเช่นนั้น!
ความช่วยเหลือในตัว: ug --help
โดยที่ ug --help WHAT
แสดงตัวเลือกที่เกี่ยวข้องกับ WHAT
คุณกำลังมองหา
ug --help regex
, ug --help globs
, ug --help fuzzy
, ug --help format
ใช้งานง่ายด้วยไฟล์การกำหนดค่าที่ปรับแต่งได้ซึ่งใช้โดยคำสั่ง ug
มีไว้สำหรับการใช้งานแบบโต้ตอบที่โหลดไฟล์การกำหนดค่า .ugrep พร้อมการตั้งค่าของคุณ
ug PATTERN ... ugrep --config PATTERN ...
ug --save-config ...options-you-want-to-save...
บันทึกไฟล์ .ugrep config ในไดเร็กทอรีการทำงาน เพื่อให้ครั้งต่อไปที่คุณเรียกใช้ ug
ที่นั่น จะใช้ตัวเลือกเหล่านี้ ทำสิ่งนี้ในโฮมไดเร็กตอรี่ของคุณเพื่อบันทึกไฟล์กำหนดค่า .ugrep พร้อมตัวเลือกที่คุณต้องการใช้โดยทั่วไป
TUI การสืบค้นเชิงโต้ตอบ กด F1 หรือ CTRL-Z เพื่อขอความช่วยเหลือ และ TAB/SHIFT-TAB เพื่อนำทางไปยัง dirs และไฟล์
ug -Q ug -Q -e PATTERN
-Q
แทนที่ PATTERN
บนบรรทัดคำสั่งเพื่อให้คุณป้อนรูปแบบแบบโต้ตอบใน TUI ใน TUI ใช้ปุ่ม ALT+ตัวอักษรเพื่อสลับเปิด/ปิด "ตัวเลือกตัวอักษร" แบบสั้น เช่น ALT-n (ตัวเลือก -n
) เพื่อแสดง/ซ่อนหมายเลขบรรทัด
ค้นหาเนื้อหาของไฟล์เก็บถาวร (zip, tar, pax, jar, cpio, 7z) และไฟล์บีบอัด (gz, Z, bz, bz2, lzma, xz, lz4, zstd, brotli)
ug -z PATTERN ... ug -z --zmax=2 PATTERN ...
ระบุ -z --zmax=2
เพื่อค้นหาไฟล์บีบอัดและไฟล์เก็บถาวรที่ซ้อนอยู่ภายในไฟล์เก็บถาวร อาร์กิวเมนต์ --zmax
อาจมีตั้งแต่ 1 (ค่าเริ่มต้น) ถึง 99 สำหรับขั้นตอนการบีบอัดและยกเลิกการเก็บถาวรสูงสุด 99 ขั้นตอนเพื่อค้นหาไฟล์เก็บถาวรที่ซ้อนกัน
ค้นหาด้วยรูปแบบข้อความค้นหาแบบบูลีนที่เหมือนกับ Google โดยใช้รูปแบบ -%
ด้วย AND
(หรือเพียงแค่เว้นวรรค), OR
(หรือแท่ง |
), NOT
(หรือขีดกลาง -
) โดยใช้เครื่องหมายคำพูดเพื่อให้ตรงกันทุกประการ และจัดกลุ่มด้วย ( )
(แสดงบน ด้านซ้ายด้านล่าง); หรือมีตัวเลือก -e
(เป็น "หรือ") --and
, --andnot
และ --not
รูปแบบ regex (แสดงทางด้านขวาด้านล่าง):
ug -% 'A B C' ... ug -e 'A' --and 'B' --and 'C' ...
ug -% 'A|B C' ... ug -e 'A' -e 'B' --and 'C' ...
ug -% 'A -B -C' ... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% 'A -(B|C)'... ug -e 'A' --andnot 'B' --andnot 'C' ...
ug -% '"abc" "def"' ... ug -e 'QabcE' --and 'QdefE' ...
โดยที่ A
, B
และ C
เป็นรูปแบบ regex โดยพลการ (ใช้ตัวเลือก -F
เพื่อค้นหาสตริง)
ระบุตัวเลือก -%%
( --bool --files
) เพื่อใช้แบบสอบถามบูลีนกับไฟล์โดยรวม: ไฟล์จะจับคู่หากเงื่อนไขบูลีนทั้งหมดเป็นไปตามรูปแบบการจับคู่ทั้งไฟล์ มิฉะนั้น เงื่อนไขบูลีนจะมีผลกับบรรทัดเดียวตามค่าเริ่มต้น เนื่องจากโดยทั่วไปยูทิลิตี้ grep เป็นตัวจับคู่รูปแบบตามบรรทัด ตัวเลือก --stats
แสดงข้อความค้นหาในรูปแบบที่มนุษย์สามารถอ่านได้หลังจากการค้นหาเสร็จสิ้น
ค้นหา pdf, doc, docx, e-book และอื่นๆ ด้วย ug+
โดยใช้ตัวกรองที่เกี่ยวข้องกับนามสกุลไฟล์:
ug+ PATTERN ...
หรือระบุ --filter
ด้วยประเภทไฟล์เพื่อใช้ยูทิลิตี้ตัวกรอง:
ug --filter='pdf:pdftotext % -' PATTERN ...
ug --filter='doc:antiword %' PATTERN ...
ug --filter='odt,docx,epub,rtf:pandoc --wrap=preserve -t plain % -o -' PATTERN ...
ug --filter='odt,doc,docx,rtf,xls,xlsx,ppt,pptx:soffice --headless --cat %' PATTERN ...
ug --filter='pem:openssl x509 -text,cer,crt,der:openssl x509 -text -inform der' PATTERN ...
ug --filter='latin1:iconv -f LATIN1 -t UTF-8' PATTERN ...
คำสั่ง ug+
เหมือนกับคำสั่ง ug
แต่ยังใช้ตัวกรองเพื่อค้นหา PDF เอกสาร และข้อมูลเมตาของรูปภาพด้วย
แสดงบริบทแนวนอนด้วยตัวเลือก -o
( --only-matching
) และตัวเลือกบริบท -ABC
เช่น เพื่อค้นหารายการที่ตรงกันในบรรทัดที่ยาวมาก เช่น แหล่งที่มาของ Javascript และ JSON:
ug -o -C20 -nk PATTERN longlines.js
-o -C20
เหมาะกับการจับคู่ทั้งหมดที่มีบริบทเป็นอักขระ 20 ตัวก่อนและ 20 ตัวอักษรหลังการจับคู่ (เช่น รวมอักขระ Unicode ทั้งหมด 40 ตัว) -nk
เอาต์พุตบรรทัดและหมายเลขคอลัมน์
ค้นหารูปแบบโดยประมาณที่ตรงกันด้วยการค้นหาแบบคลุมเครือ ภายในระยะทาง Levenshtein ที่ระบุ
ug -Z PATTERN ... ug -Z3 PATTTERN ...
-Zn
จับคู่อักขระพิเศษที่หายไปหรือถูกแทนที่สูงสุด n
ตัว -Z+n
จับคู่อักขระพิเศษสูงสุด n
ตัว -Zn
จับคู่อักขระที่หายไปสูงสุด n
และ -Z~n
จับคู่อักขระที่ถูกแทนที่สูงสุด n
ตัว -Z
มีค่าเริ่มต้นเป็น -Z1
การค้นหาแบบ Fzf ด้วย regex (หรือสตริงคงที่ด้วย -F
) การจับคู่แบบคลุมเครือด้วยอักขระพิเศษสูงสุด 4 ตัวด้วย -Z+4
และคำเฉพาะด้วย -w
ใช้ -%%
สำหรับการค้นหาบูลีนทั้งไฟล์
ug -Q -%% -l -w -Z+4 --sort=best
-l
แสดงรายการไฟล์ที่ตรงกันใน TUI กด TAB
จากนั้น ALT-y
เพื่อดูไฟล์ SHIFT-TAB
และ Alt-l
เพื่อกลับไปดูรายการไฟล์ที่ตรงกันโดยเรียงลำดับตามการจับคู่ที่ดีที่สุด
ค้นหาไฟล์ไบนารีและแสดง hexdumps ด้วยการจับคู่รูปแบบไบนารี (ข้อความ Unicode หรือ -U
สำหรับรูปแบบไบต์)
ug --hexdump -U BYTEPATTERN ... ug --hexdump TEXTPATTERN ...
ug -X -U BYTEPATTERN ... ug -X TEXTPATTERN ...
ug -W -U BYTEPATTERN ... ug -W TEXTPATTERN ...
--hexdump=4chC1
แสดง 4
คอลัมน์ของเลขฐานสิบหกโดยไม่มีคอลัมน์อักขระ c
ไม่มีการเว้นวรรคเลขฐานสิบหก h
และมีบรรทัดเลขฐานสิบหกพิเศษหนึ่งบรรทัด C1
ก่อนและหลังการแข่งขัน
รวมไฟล์เพื่อค้นหาตามประเภทไฟล์หรือไฟล์ "magic bytes" หรือยกเว้นด้วย ^
ug -t TYPE PATTERN ... ug -t ^TYPE PATTERN ...
ug -M 'MAGIC' PATTERN ... ug -M '^MAGIC' PATTERN ...
รวมไฟล์และไดเร็กทอรีเพื่อค้นหาที่ตรงกับ globs สไตล์ gitignore หรือแยกออกด้วย ^
ug -g 'FILEGLOB' PATTERN ... ug -g '^FILEGLOB' PATTERN ...
ug -g 'DIRGLOB/' PATTERN ... ug -g '^DIRGLOB/' PATTERN ...
ug -g 'PATH/FILEGLOB' PATTERN ... ug -g '^PATH/FILEGLOB' PATTERN ...
ug -g 'PATH/DIRGLOB/' PATTERN ... ug -g '^PATH/DIRGLOB/' PATTERN ...
รวมไฟล์เพื่อค้นหาด้วยนามสกุลไฟล์ (ส่วนต่อท้าย) หรือยกเว้นด้วย ^
ซึ่งเป็นชวเลขสำหรับ -g"*.EXT"
ug -O EXT PATTERN ... ug -O ^EXT PATTERN ...
รวมไฟล์ที่ซ่อน (dotfiles) และไดเร็กทอรีที่จะค้นหา (ละไว้ตามค่าเริ่มต้น)
ug -. PATTERN ... ug -g'.*,.*/' PATTERN ...
ระบุ hidden
ใน .ugrep ของคุณเพื่อค้นหาไฟล์ที่ซ่อนด้วย ug
เสมอ
ยกเว้นไฟล์ที่ระบุโดย .gitignore ฯลฯ
ug --ignore-files PATTERN ... ug --ignore-files=.ignore PATTERN ...
ระบุ ignore-files
ใน .ugrep ของคุณเพื่อละเว้นไฟล์เหล่านั้นด้วย ug
เสมอ เพิ่ม ignore-files=...
เพิ่มเติมตามต้องการ
รูปแบบการค้นหาที่ไม่รวมรูปแบบเชิงลบ ("จับคู่สิ่งนี้แต่ไม่เป็นเช่นนั้น")
ug -e PATTERN -N NOTPATTERN ... ug -e '[0-9]+' -N 123 ...
ใช้รูปแบบ regex ที่กำหนดไว้ล่วงหน้าเพื่อค้นหาซอร์สโค้ด, จาวาสคริปต์, XML, JSON, HTML, PHP, มาร์กดาวน์ ฯลฯ
ug PATTERN -f c++/zap_comments -f c++/zap_strings ...
ug PATTERN -f php/zap_html ...
ug -f js/functions ... | ug PATTERN ...
จัดเรียงไฟล์ที่ตรงกันตามชื่อ ตรงที่สุด ขนาด และเวลา
ug --sort PATTERN ... ug --sort=size PATTERN ...
ug --sort=changed PATTERN ... ug --sort=created PATTERN ...
ug -Z --sort=best PATTERN ... ug --no-sort PATTERN ...
ผลลัพธ์เอาต์พุตในรูปแบบ CSV, JSON, XML และรูปแบบที่ผู้ใช้ระบุ
ug --csv PATTERN ... ug --json PATTERN ...
ug --xml PATTERN ... ug --format='file=%f line=%n match=%O%~' PATTERN ...
ug --help format
แสดงความช่วยเหลือในรูปแบบ %
ฟิลด์สำหรับเอาต์พุตที่กำหนดเอง
ค้นหาด้วยรูปแบบ regex ที่เข้ากันได้กับ Perl ของ PCRE และแสดงหรือแทนที่การจับคู่รูปแบบย่อย
ug -P PATTERN ... ug -P --format='%1 and %2%~' 'PATTERN(SUB1)(SUB2)' ...
แทนที่รูปแบบในเอาต์พุตด้วย -P และ --replace ข้อความแทนที่ โดยอาจมีฟิลด์การจัดรูปแบบ %
หรือไม่ก็ได้ โดยใช้ -y
เพื่อส่งผ่านส่วนที่เหลือของไฟล์ผ่าน:
ug --replace='TEXT' PATTERN ... ug -y --replace='TEXT' PATTERN ...
ug --replace='(%m:%o)' PATTERN ... ug -y --replace='(%m:%o)' PATTERN ...
ug -P --replace='%1' PATTERN ... ug -y -P --replace='%1' PATTERN ...
ug --help format
แสดงความช่วยเหลือในรูปแบบ %
ฟิลด์ที่จะเลือกใช้กับ --replace
ค้นหาไฟล์ด้วยรูปแบบการเข้ารหัสเฉพาะ เช่น ISO-8859-1 ถึง 16, CP 437, CP 850, MACROMAN, KOI8 เป็นต้น
ug --encoding=LATIN1 PATTERN ...
ติดตั้ง ugrep ล่าสุดด้วย Homebrew:
$ brew install ugrep
หรือติดตั้งด้วย MacPorts:
$ sudo port install ugrep
การดำเนินการนี้จะติดตั้งคำสั่ง ugrep
และ ug
โดยที่ ug
เหมือนกับ ugrep
แต่ยังโหลดไฟล์การกำหนดค่า .ugrep เมื่อมีอยู่ในไดเร็กทอรีทำงานหรือโฮมไดเร็กทอรี
ติดตั้งด้วย Winget winget install Genivia.ugrep
หรือติดตั้งด้วย Chocolatey choco install ugrep
หรือติดตั้งด้วย Scoop scoop install ugrep
หรือดาวน์โหลดไฟล์ปฏิบัติการ ugrep.exe
ที่มีคุณสมบัติครบถ้วนในรูปแบบ release artifact จาก https://github.com/Genivia/ugrep/releases รุ่นซิปประกอบด้วยไบนารี ugrep.exe
หลักและ ug.exe
คำสั่ง ug
มีไว้สำหรับการใช้งานเชิงโต้ตอบ โหลดและอ่านการตั้งค่าจากไฟล์คอนฟิกูเรชัน .ugrep
(เมื่อมีอยู่ในไดเร็กทอรีการทำงานหรือโฮมไดเร็กทอรี)
เพิ่ม ugrep.exe
และ ug.exe
ไปยังเส้นทางการดำเนินการของคุณ: ไปที่ การตั้งค่า และค้นหา "เส้นทาง" ใน ค้นหาการตั้งค่า เลือก ตัวแปรสภาพแวดล้อม -> เส้นทาง -> ใหม่ และเพิ่มไดเร็กทอรีที่คุณวางไฟล์ปฏิบัติการ ugrep.exe
และ ug.exe
เคล็ดลับ
คำแนะนำที่เป็นประโยชน์เกี่ยวกับการใช้ ugrep.exe
และ ug.exe
บนบรรทัดคำสั่งของ Windows:
'
เดี่ยว แต่ใช้ "
แทน ยูทิลิตี้คำสั่ง Windows ส่วนใหญ่พิจารณาส่วนเครื่องหมายคำพูด '
เดี่ยวของอาร์กิวเมนต์บรรทัดคำสั่ง!-g/GLOB
แทนอาร์กิวเมนต์บรรทัดคำสั่ง GLOB
ปกติเพื่อเลือกไฟล์และไดเร็กทอรีที่จะค้นหา โดยเฉพาะอย่างยิ่งสำหรับการค้นหาแบบเรียกซ้ำ""
เพื่อให้ตรงกับอินพุตทั้งหมด สิ่งนี้อาจถูกละเลยโดยล่ามคำสั่ง Windows บางตัว เช่น Powershell ในกรณีนี้คุณต้องระบุตัวเลือก --match
แทนR
แทน n
เพื่อจับคู่การขึ้นบรรทัดใหม่ของ Unicode เช่น คู่ rn
และ single r
และ n
$ apk add ugrep ugrep-doc
ตรวจสอบhttps://pkgs.alpinelinux.org/packages?name=ugrepสำหรับข้อมูลเวอร์ชัน
$ pacman -S ugrep
ตรวจสอบhttps://archlinux.org/packages/extra/x86_64/ugrepสำหรับข้อมูลเวอร์ชัน
ขั้นแรกให้เปิดใช้งานที่เก็บ EPEL จากนั้นจึงติดตั้ง ugrep ได้
$ dnf install ugrep
ตรวจสอบhttps://packages.fedoraproject.org/pkgs/ugrep/ugrep/ สำหรับข้อมูลเวอร์ชัน
$ apt-get install ugrep
ตรวจสอบhttps://packages.debian.org/ugrepสำหรับข้อมูลเวอร์ชัน หากต้องการสร้างและลองใช้ ugrep
ในเครื่อง โปรดดูขั้นตอนการสร้าง "ทุกแพลตฟอร์ม" เพิ่มเติมด้านล่าง
$ dnf install ugrep
ตรวจสอบhttps://packages.fedoraproject.org/pkgs/ugrep/ugrep/ สำหรับข้อมูลเวอร์ชัน
$ pkg install ugrep
ตรวจสอบhttps://www.freshports.org/textproc/ugrepสำหรับข้อมูลเวอร์ชัน
$ pkgman install cmd:ugrep
ตรวจสอบhttps://github.com/haikuports/haikuports/tree/master/app-text/ugrepสำหรับข้อมูลเวอร์ชัน หากต้องการสร้างและลองใช้ ugrep
ในเครื่อง โปรดดูขั้นตอนการสร้าง "ทุกแพลตฟอร์ม" เพิ่มเติมด้านล่าง
คุณสามารถใช้ตัวติดตั้งแพ็คเกจ NetBSD มาตรฐาน (pkgsrc): http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/textproc/ugrep/README.html
$ pkg_add ugrep
ตรวจสอบhttps://openports.pl/path/sysutils/ugrepสำหรับข้อมูลเวอร์ชัน
$ zypper install ugrep
ตรวจสอบhttps://build.opensuse.org/package/show/utilities/ugrepสำหรับข้อมูลเวอร์ชัน
ขั้นแรกให้เปิดใช้งานที่เก็บ EPEL จากนั้นจึงติดตั้ง ugrep ได้
$ dnf install ugrep
ตรวจสอบhttps://packages.fedoraproject.org/pkgs/ugrep/ugrep/ สำหรับข้อมูลเวอร์ชัน
โคลน ugrep
ด้วย
$ git clone https://github.com/Genivia/ugrep
หรือไปที่ https://github.com/Genivia/ugrep/releases เพื่อดาวน์โหลดรุ่นเฉพาะ
คุณสามารถเพิ่มสิ่งเหล่านี้ได้ในภายหลังเมื่อคุณต้องการคุณสมบัติเหล่านี้:
ตัวเลือก -P
(นิพจน์ทั่วไป Perl) ต้องใช้ไลบรารี PCRE2 (แนะนำ) หรือไลบรารี Boost.Regex (ทางเลือกสำรอง) หากไม่ได้ติดตั้ง PCRE2 ให้ติดตั้ง PCRE2 ด้วยเช่น sudo apt-get install -y libpcre2-dev
หรือดาวน์โหลด PCRE2 แล้วทำตามคำแนะนำในการติดตั้ง หรือดาวน์โหลด Boost.Regex และเรียกใช้ ./bootstrap.sh
และ sudo ./b2 --with-regex install
ดูบูสต์: การเริ่มต้นใช้งาน
ตัวเลือก -z
(การค้นหาไฟล์บีบอัดและไฟล์เก็บถาวร) จำเป็นต้องติดตั้งไลบรารี zlib มีการติดตั้งบนระบบส่วนใหญ่ ถ้าไม่เช่นนั้น ให้ทำการติดตั้ง เช่น sudo apt-get install -y libz-dev
หากต้องการค้นหาไฟล์ .bz
และ .bz2
ให้ติดตั้งไลบรารี bzip2 (แนะนำ) เช่น sudo apt-get install -y libbz2-dev
หากต้องการค้นหาไฟล์ .lzma
และ .xz
ให้ติดตั้งไลบรารี lzma (แนะนำ) เช่น sudo apt-get install -y liblzma-dev
หากต้องการค้นหาไฟล์ .lz4
ให้ติดตั้งไลบรารี lz4 (ไม่จำเป็น ไม่จำเป็น) เช่น sudo apt-get install -y liblz4-dev
หากต้องการค้นหาไฟล์ .zst
ให้ติดตั้งไลบรารี zstd (ไม่จำเป็น ไม่จำเป็น) เช่น sudo apt-get install -y libzstd-dev
หากต้องการค้นหาไฟล์ .br
ให้ติดตั้งไลบรารี brotli (ไม่จำเป็น ไม่จำเป็น) เช่น sudo apt-get install -y libbrotli-dev
หากต้องการค้นหาไฟล์ .bz3
ให้ติดตั้งไลบรารี bzip3 (ไม่จำเป็น ไม่จำเป็น) เช่น sudo apt-get install -y bzip3
เคล็ดลับ
แม้ว่าระบบของคุณจะมียูทิลิตีบรรทัดคำสั่ง เช่น bzip2
แต่นั่นไม่ได้หมายความว่ามีการติดตั้งไลบรารีการพัฒนา เช่น libbz2
เสมอไป ควรติดตั้ง ไลบรารีการพัฒนา
ระบบ Linux บางระบบอาจไม่ได้รับการกำหนดค่าให้โหลดไลบรารีแบบไดนามิกจาก /usr/local/lib
ทำให้เกิดข้อผิดพลาดในการโหลดไลบรารีเมื่อเรียกใช้ ugrep
เพื่อแก้ไขปัญหานี้ ให้เพิ่ม export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
ลงในไฟล์ ~/.bashrc
ของคุณ หรือเรียกใช้ sudo ldconfig /usr/local/lib
ดำเนินการสคริปต์ ./build.sh
เพื่อสร้าง ugrep
:
$ cd ugrep
$ ./build.sh
สิ่งนี้จะสร้างไฟล์ปฏิบัติการ ugrep
ในไดเร็กทอรี ugrep/src
ด้วย ./configure
และ make -j
ตรวจสอบด้วย make test
เมื่อการทดสอบทั้งหมดผ่านไป ไฟล์ปฏิบัติการ ugrep
จะถูกคัดลอกไปยัง ugrep/bin/ugrep
และ symlink ugrep/bin/ug -> ugrep/bin/ugrep
จะถูกเพิ่มสำหรับคำสั่ง ug
โปรดทราบว่า ug
นั้นเหมือนกับ ugrep
แต่ยังโหลดไฟล์การกำหนดค่า .ugrep เมื่อมีอยู่ในไดเร็กทอรีทำงานหรือโฮมไดเร็กทอรี ซึ่งหมายความว่าคุณสามารถกำหนดตัวเลือกเริ่มต้นสำหรับ ug
ใน .ugrep ได้
เส้นทางอื่นไปยังไลบรารีที่ติดตั้งหรือในเครื่องอาจระบุด้วย . ./build.sh
หากต้องการความช่วยเหลือเกี่ยวกับตัวเลือกบิวด์ที่มีให้:
$ ./build.sh --help
คุณสามารถสร้างไฟล์เรียกทำงานแบบคงที่ได้โดยการระบุ:
$ ./build.sh --enable-static
สิ่งนี้อาจล้มเหลวหากไลบรารีไม่ลิงก์แบบคงที่ เช่น brotli ในกรณีนั้นลอง ./build.sh --enable-static --without-brotli
คุณสามารถสร้าง ugrep
โดยเปิดใช้งานค่าเริ่มต้นที่กำหนดเองได้ เช่น เพจเจอร์:
$ ./build.sh --enable-pager
ตัวเลือกในการเลือกค่าเริ่มต้นสำหรับบิวด์ได้แก่:
--help
แสดงตัวเลือกการสร้าง--enable-static
build static executables ถ้าเป็นไปได้--enable-hidden
ค้นหาไฟล์และไดเร็กทอรีที่ซ่อนอยู่เสมอ--enable-pager
ใช้เพจเจอร์เสมอเพื่อแสดงเอาต์พุตบนเทอร์มินัล--enable-pretty
colorize เอาท์พุทไปยังเทอร์มินัลและเพิ่มส่วนหัวของชื่อไฟล์--disable-auto-color
ปิดใช้งานสีอัตโนมัติ ต้องใช้ตัวเลือก ugrep --color=auto
เพื่อแสดงสี--disable-mmap
ปิดการใช้งานไฟล์ที่แมปหน่วยความจำ--disable-sse2
ปิดใช้งานการเพิ่มประสิทธิภาพ SSE2 และ AVX--disable-avx2
ปิดใช้งานการเพิ่มประสิทธิภาพ AVX2 และ AVX512BW แต่คอมไพล์ด้วย SSE2 เมื่อได้รับการสนับสนุน--disable-neon
ปิดการใช้งานการเพิ่มประสิทธิภาพ ARM NEON/AArch64--with-grep-path
เป็นค่าเริ่มต้น -f
path หากไม่ได้กำหนด GREP_PATH
--with-grep-colors
เป็นสีเริ่มต้นหากไม่ได้กำหนด GREP_COLORS
หลังจากบิลด์เสร็จสมบูรณ์ ให้คัดลอก ugrep/bin/ugrep
และ ugrep/bin/ug
ไปยังตำแหน่งที่สะดวก เช่น ในไดเร็กทอรี ~/bin
ของคุณ หรือหากคุณต้องการติดตั้งคำสั่ง ugrep
และ ug
และ man page:
$ sudo make install
นอกจากนี้ยังติดตั้งไฟล์รูปแบบด้วยรูปแบบที่กำหนดไว้ล่วงหน้าสำหรับตัวเลือก -f
ที่ /usr/local/share/ugrep/patterns/
ตัวเลือก -f
จะตรวจสอบไดเร็กทอรีการทำงานว่ามีไฟล์รูปแบบอยู่หรือไม่ หากไม่พบ ให้ตรวจสอบตัวแปรสภาพแวดล้อม GREP_PATH
เพื่อโหลดไฟล์รูปแบบ และหากไม่พบ ให้อ่านไฟล์รูปแบบที่กำหนดไว้ล่วงหน้าที่ติดตั้งไว้
น่าเสียดายที่ git clone ไม่ได้เก็บการประทับเวลาไว้ ซึ่งหมายความว่าคุณอาจพบ "คำเตือน: 'alocal-1.15' หายไปในระบบของคุณ" หรือไม่พบ autoheader เมื่อรัน make
เมื่อต้องการแก้ไขปัญหานี้ ให้เรียกใช้:
$ autoreconf -fi
$ ./build.sh
GCC 8 และสูงกว่าอาจสร้างคำเตือนของการเรียงลำดับ "หมายเหตุ: การส่งพารามิเตอร์สำหรับอาร์กิวเมนต์ ... เปลี่ยนใน GCC 7.1" คำเตือนเหล่านี้ควรถูกละเว้น
รวม Dockerfile เพื่อสร้าง ugrep
ในคอนเทนเนอร์ Ubuntu
นักพัฒนาอาจต้องการใช้สารฆ่าเชื้อเพื่อตรวจสอบรหัส ugrep เมื่อทำการเปลี่ยนแปลงที่สำคัญ เช่น เพื่อตรวจจับการแข่งขันของข้อมูลด้วย ThreadSanitizer:
$ ./build.sh CXXFLAGS='-fsanitize=thread -O1 -g'
เราตรวจสอบ ugrep
ด้วย AddressSanitizer, MemorySanitizer, ThreadSanitizer และ UndefiorSanitizer ดังกราว ตัวเลือกเหล่านี้มีค่าใช้จ่ายรันไทม์จำนวนมาก และไม่ควรใช้สำหรับบิวด์ขั้นสุดท้าย
- กลับไปที่สารบัญ
โปรดทราบว่าคำสั่ง ugrep และ ug จะค้นหาไฟล์ไบนารี่ตามค่าเริ่มต้น และจะไม่ละเว้นไฟล์ที่ระบุ .gitignore ซึ่งจะไม่ทำให้การเปรียบเทียบประสิทธิภาพการค้นหาแบบเรียกซ้ำมีความหมาย เว้นแต่จะใช้ตัวเลือก -I
และ --ignore-files
หากต้องการให้ตัวเลือกเหล่านี้เป็นค่าเริ่มต้นสำหรับ ug เพียงเพิ่มไฟล์ ignore-binary
และ ignore-files
ลงในไฟล์การกำหนดค่า .ugrep ของคุณ
สำหรับการเปรียบเทียบประสิทธิภาพที่ทันสมัยของ ugrep ล่าสุด โปรดดูเกณฑ์มาตรฐานประสิทธิภาพของ ugrep Ugrep เร็วกว่า GNU grep, Silver Searcher, ack, sift ความเร็วของ Ugrep เหนือกว่า ripgrep ในการวัดประสิทธิภาพส่วนใหญ่
ก่อนอื่น เรามากำหนดคำสั่ง :grep
ใน Vim เพื่อค้นหาไฟล์แบบวนซ้ำกัน โดยเพิ่มบรรทัดต่อไปนี้ใน .vimrc
ของคุณที่อยู่ในไดเร็กทอรีราก:
if executable('ugrep')
set grepprg=ugrep -RInk -j -u --tabs=1 --ignore-files
set grepformat=%f:%l:%c:%m,%f+%l+%c+%m,%-G%f\|%l\|%c\|%m
endif
สิ่งนี้ระบุการค้นหาที่ไม่คำนึงถึงขนาดตัวพิมพ์ -j
ด้วยคำสั่ง Vim :grep
สำหรับการค้นหาแบบคำนึงถึงขนาดตัวพิมพ์ ให้ลบ -j
ออกจาก grepprg
รายการที่ตรงกันหลายรายการในบรรทัดเดียวกันจะแสดงรายการในหน้าต่างแก้ไขด่วนแยกกัน หากไม่ต้องการ ให้ลบ -u
ออกจาก grepprg
ด้วยการเปลี่ยนแปลงนี้ ระบบจะแสดงเฉพาะรายการที่ตรงกันรายการแรกเท่านั้น ตัวเลือก --ignore-files
ข้ามไฟล์ที่ระบุในไฟล์ .gitignore
หากมี หากต้องการจำกัดความลึกของการค้นหาแบบเรียกซ้ำเฉพาะในไดเร็กทอรีปัจจุบันเท่านั้น ให้ผนวก -1
ต่อท้าย grepprg
ตอนนี้คุณสามารถเรียกใช้คำสั่ง Vim :grep
ใน Vim เพื่อค้นหาไฟล์บน PATH
ที่ระบุสำหรับการจับคู่ PATTERN
:
:grep PATTERN [PATH]
หากคุณละเว้น PATH
ไดเร็กทอรีการทำงานจะถูกค้นหา ใช้ %
เป็น PATH
เพื่อค้นหาเฉพาะไฟล์ที่เปิดอยู่ในปัจจุบันใน Vim:
:grep PATTERN %
คำสั่ง :grep
จะแสดงผลลัพธ์ในหน้าต่าง Quickfix ที่ช่วยให้คุณสามารถข้ามไปยังรายการที่ตรงกันได้อย่างรวดเร็ว
หากต้องการเปิดหน้าต่าง Quickfix พร้อมรายการการแข่งขันล่าสุด:
:copen
ดับเบิลคลิกที่บรรทัดในหน้าต่างนี้ (หรือเลือกบรรทัดแล้วกด ENTER) เพื่อข้ามไปยังไฟล์และตำแหน่งในไฟล์ที่ตรงกัน ป้อนคำสั่ง :cn
และ :cp
เพื่อข้ามไปยังนัดถัดไปหรือก่อนหน้า ตามลำดับ หากต้องการอัปเดตผลการค้นหาในหน้าต่าง Quickfix เพียง grep พวกเขา ตัวอย่างเช่น หากต้องการค้นหาซอร์สโค้ด C++ ที่ทำเครื่องหมายว่า FIXME
แบบวนซ้ำในไดเร็กทอรีการทำงาน:
:grep -tc++ FIXME
หากต้องการปิดหน้าต่างการแก้ไขด่วน:
:cclose
คุณสามารถใช้ตัวเลือก ugrep กับคำสั่ง :grep
ได้ เช่น เพื่อเลือกความคิดเห็นบรรทัดเดียวและหลายบรรทัดในไฟล์ปัจจุบัน:
:grep -f c++/comments %
เฉพาะบรรทัดแรกของความคิดเห็นหลายบรรทัดเท่านั้นที่จะแสดงใน Quickfix เพื่อประหยัดพื้นที่ หากต้องการแสดงทุกบรรทัดของการจับคู่แบบหลายบรรทัด ให้ลบ %-G
ออกจาก grepformat
เครื่องมือ Vim ยอดนิยมคือ ctrlp.vim ซึ่งติดตั้งด้วย:
$ cd ~/.vim
$ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim
CtrlP ใช้ ugrep โดยเพิ่มบรรทัดต่อไปนี้ใน .vimrc
:
if executable('ugrep')
set runtimepath^=~/.vim/bundle/ctrlp.vim
let g:ctrlp_match_window='bottom,order:ttb'
let g:ctrlp_user_command='ugrep "" %s -Rl -I --ignore-files -3'
endif
โดยที่ -I
ข้ามไฟล์ไบนารี ตัวเลือก --ignore-files
ข้ามไฟล์ที่ระบุในไฟล์ .gitignore
หากมีอยู่ และตัวเลือก -3
จำกัดการค้นหาไดเร็กทอรีไว้ที่สามระดับ (ไดเร็กทอรีการทำงานและสูงสุดสองระดับด้านล่าง)
เริ่ม Vim จากนั้นป้อนคำสั่ง:
:helptags ~/.vim/bundle/ctrlp.vim/doc
หากต้องการดูเอกสาร CtrlP ใน Vim ให้ป้อนคำสั่ง:
:help ctrlp.txt
- กลับไปที่สารบัญ
ขอบคุณ Manuel Uberti ตอนนี้คุณสามารถใช้ ugrep ใน Emacs ได้แล้ว หากต้องการใช้ ugrep แทน GNU grep ภายใน Emacs ให้เพิ่มบรรทัดต่อไปนี้ในไฟล์ .emacs.d/init.el
ของคุณ:
(setq-default xref-search-program ‘ugrep)
ซึ่งหมายความว่าคำสั่ง Emacs เช่น project-find-regexp
ที่ใช้ Xref สามารถใช้ประโยชน์จากพลังของ ugrep ได้แล้ว
นอกจากนี้ คุณสามารถใช้ grep
ในคำสั่ง grep ของ Emacs ได้ ตัวอย่างเช่น คุณสามารถรัน lgrep
ด้วย ugrep
ได้โดยปรับแต่ง grep-template
ดังต่อไปนี้:
(setq-default grep-template "ugrep --color=always -0Iinr -e <R>")
หากคุณไม่มี Emacs เวอร์ชัน 29 (หรือสูงกว่า) คุณสามารถดาวน์โหลดและสร้าง Emacs ได้จากสาขาหลักของ Emacs หรือเปิดใช้งานการรวม Xref กับ ugrep ด้วยตนเอง:
(with-eval-after-load 'xref
(push '(ugrep . "xargs -0 ugrep <C> --null -ns -e <R>")
xref-search-program-alist)
(setq-default xref-search-program 'ugrep))
- กลับไปที่สารบัญ
ugrep ที่พร้อมใช้งานทันทีรองรับตัวเลือกบรรทัดคำสั่ง grep GNU/BSD มาตรฐานทั้งหมดและปรับปรุงหลายตัวเลือกด้วย สำหรับรายละเอียด โปรดดูการปรับปรุงที่โดดเด่นเหนือ grep
หากคุณต้องการยึดติดกับรูปแบบ Unicode ที่ไม่ใช่ UTF grep ASCII/LATIN1 ของ GNU/BSD ให้ใช้ตัวเลือก -U
เพื่อปิดใช้งานการจับคู่รูปแบบ Unicode แบบเต็ม
ในความเป็นจริงการดำเนินการ ugrep
ด้วยตัวเลือก -U
, -Y
, -.
และ --sort
ทำให้มันทำงานเหมือนกับ egrep
โดยจับคู่เฉพาะรูปแบบ ASCII/LATIN1 ที่ไม่ใช่ UTF Unicode เท่านั้น โดยอนุญาตให้มีรูปแบบว่างเพื่อจับคู่และค้นหาไฟล์ที่ซ่อนไว้ แทนที่จะเพิกเฉยตามลำดับ ดูความเท่าเทียมกันของ grep
คุณสามารถสร้างนามแฝง grep ที่สะดวกโดยมีหรือไม่มีตัวเลือก -U
, -Y
, -.
และ --sort
หรือรวมตัวเลือกอื่นๆ ตามต้องการ
หรือคุณสามารถสร้างไฟล์ปฏิบัติการ grep
, egrep
และ fgrep
ได้โดยการคัดลอก ugrep
ไปยังชื่อเหล่านั้น เมื่อไฟล์ปฏิบัติการ ugrep
(หรือ ugrep.exe
) ถูกคัดลอกเป็น grep
( grep.exe
), egrep
( egrep.exe
), fgrep
( fgrep.exe
) จากนั้นตัวเลือก -U
, -Y
และ -.
จะเปิดใช้งานโดยอัตโนมัติพร้อมกับ -G
สำหรับ grep
, -E
สำหรับ egrep
และ -F
สำหรับ fgrep
นอกจากนี้ เมื่อคัดลอกเป็น zgrep
, zegrep
และ zfgrep
ตัวเลือก -z
จะถูกเปิดใช้งาน ตัวอย่างเช่น เมื่อคัดลอก ugrep
เป็น zegrep
ตัวเลือก -z
, -E
, -Y
, -.
และ --sort
เปิดใช้งานอยู่
ในทำนองเดียวกัน symlink และฮาร์ดลิงก์ไปยัง ugrep
ก็ทำงานได้ดีเช่นกันเพื่อสร้างการแทนที่ grep
, egrep
และ fgrep
ตัวอย่างเช่น หากต้องการสร้าง symlink egrep
:
sudo ln -s `which ugrep` /opt/local/bin/egrep
/opt/local/bin
เป็นเพียงตัวอย่างและอาจอยู่ใน $path
ของคุณหรือไม่ก็ได้ และอาจพบหรือไม่พบเมื่อรัน egrep
ทั้งนี้ขึ้นอยู่กับ $path
ของคุณ
ugrep เทียบเท่ากับ GNU/BSD grep เมื่อใช้ตัวเลือกต่อไปนี้:
grep = ugrep -G -U -Y -. --sort -Dread -dread
egrep = ugrep -E -U -Y -. --sort -Dread -dread
fgrep = ugrep -F -U -Y -. --sort -Dread -dread
zgrep = ugrep -z -G -U -Y -. --sort -Dread -dread
zegrep = ugrep -z -E -U -Y -. --sort -Dread -dread
zfgrep = ugrep -z -F -U -Y -. --sort -Dread -dread
ที่ไหน:
-U
ปิดใช้งานการจับคู่รูปแบบอักขระแบบกว้างของ Unicode ดังนั้น ตัวอย่างเช่น รูปแบบ xa3
จะจับคู่ไบต์ A3 แทนที่จะเป็นจุดโค้ด Unicode U+00A3 ที่แสดงด้วยลำดับ UTF-8 C2 A3 โดยค่าเริ่มต้นใน ugrep xa3
จะตรงกับ U+00A3 เราไม่แนะนำให้ใช้ -U
สำหรับการค้นหารูปแบบข้อความ เฉพาะสำหรับการค้นหาแบบไบนารี่หรือเพื่อค้นหาไฟล์ latin-1 (iso-8859-1) โดยไม่รายงานว่าไฟล์เหล่านี้เป็นไบนารี่ (ตั้งแต่ ugrep v3.5.0)-Y
เปิดใช้งานการจับคู่ที่ว่างเปล่า ตัวอย่างเช่น รูปแบบ a*
จะจับคู่ทุกบรรทัดแทนที่จะเป็นลำดับของ a
s ตามค่าเริ่มต้นใน ugrep รูปแบบ a*
จะจับคู่ลำดับของ a
s ยิ่งไปกว่านั้น ใน ugrep รูปแบบ a*b*c*
จะตรงกับสิ่งที่ควรจะจับคู่ตามค่าเริ่มต้น ดูการปรับปรุง-.
ค้นหาไฟล์ที่ซ่อนอยู่ (dotfiles) ตามค่าเริ่มต้น ไฟล์ที่ซ่อนจะถูกละเว้น เช่นเดียวกับยูทิลิตี้ Unix ส่วนใหญ่--sort
ระบุเอาต์พุตที่เรียงลำดับตามชื่อพาธ โดยแสดงไฟล์ที่ตรงกันที่เรียงลำดับก่อนแล้วตามด้วยการจับคู่แบบเรียกซ้ำที่เรียงลำดับในไดเรกทอรีย่อย มิฉะนั้น ไฟล์ที่ตรงกันจะถูกรายงานโดยไม่มีลำดับใดเป็นพิเศษเพื่อปรับปรุงประสิทธิภาพ-Dread
และ -dread
เป็นค่าเริ่มต้น grep ของ GNU/BSD แต่ไม่แนะนำ โปรดดูคำอธิบายที่การปรับปรุง- กลับไปที่สารบัญ
นามแฝงที่ใช้กันทั่วไปเพื่อเพิ่มใน .bashrc
เพื่อเพิ่มประสิทธิภาพการทำงาน:
alias uq = 'ug -Q' # interactive TUI search (uses .ugrep config)
alias uz = 'ug -z' # compressed files and archives search (uses .ugrep config)
alias ux = 'ug -U --hexdump' # binary pattern search (uses .ugrep config)
alias ugit = 'ug -R --ignore-files' # works like git-grep & define your preferences in .ugrep config
alias grep = 'ug -G' # search with basic regular expressions (BRE) like grep
alias egrep = 'ug -E' # search with extended regular expressions (ERE) like egrep
alias fgrep = 'ug -F' # find string(s) like fgrep
alias zgrep = 'ug -zG' # search compressed files and archives with BRE
alias zegrep = 'ug -zE' # search compressed files and archives with ERE
alias zfgrep = 'ug -zF' # find string(s) in compressed files and/or archives
alias xdump = 'ugrep -X ""' # hexdump files without searching (don't use .ugrep config)
alias zmore = 'ugrep+ -z -I -+ --pager ""' # view compressed, archived and regular files (don't use .ugrep config)
- กลับไปที่สารบัญ
-Q
n
-U
)--bool
)--ignore-files
-Z
ด้วยตัวเลือก-z
-z
-z
และ --zmax=NUM
สำหรับความลึกสูงสุด NUM
ระดับ--filter
โดยใช้ยูทิลิตี้การแปลงรูปแบบของบุคคลที่สามเป็นปลั๊กอิน-r
เพื่อค้นหาไดเรกทอรีแบบวนซ้ำ-.
)-E
เป็น egrep ในขณะที่ -G
เปิดใช้งาน BRE)-J1
)-W
(เอาต์พุตการจับคู่ไบนารี่ในรูปแบบ hex พร้อมข้อความจับคู่เอาต์พุตตามปกติ) และ -X
(เอาต์พุตการจับคู่ทั้งหมดในรูปแบบฐานสิบหก)--format
)-f
ใช้ตัวแปรสภาพแวดล้อม GREP_PATH
หรือรูปแบบที่กำหนดไว้ล่วงหน้าที่ติดตั้งใน /usr/local/share/ugrep/patterns
หากระบุ -f
และระบุรูป -e
ตั้งแต่หนึ่งรูปแบบขึ้นไปด้วย ดังนั้นอ็อพชัน -F
, -x
และ -w
จะไม่ใช้กับรูปแบบ -f
เพื่อหลีกเลี่ยงความสับสนเมื่อใช้ -f
กับรูปแบบที่กำหนดไว้ล่วงหน้าซึ่งอาจทำงานไม่ถูกต้องกับตัวเลือกเหล่านี้อีกต่อไป-O
, -M
และ -t
ระบุนามสกุลไฟล์ รูปแบบไบต์เมจิกลายเซ็นไฟล์ และประเภทไฟล์ที่กำหนดไว้ล่วงหน้า ตามลำดับ ซึ่งช่วยให้สามารถค้นหาไฟล์บางประเภทในแผนผังไดเร็กทอรี เช่น ด้วยตัวเลือกการค้นหาแบบเรียกซ้ำ -R
และ -r
ตัวเลือก -O
, -M
และ -t
ยังใช้กับไฟล์ที่เก็บถาวรในไฟล์ cpio, jar, pax, tar, zip และ 7z-k
, --column-number
เพื่อแสดงหมายเลขคอลัมน์ โดยคำนึงถึงระยะห่างของแท็บด้วยการขยายแท็บ ตามที่ระบุโดยตัวเลือก --tabs
-P
(นิพจน์ทั่วไป Perl) รองรับการอ้างอิงย้อนกลับ (ด้วย --format
) และ lookbehinds ซึ่งใช้ไลบรารี PCRE2 หรือ Boost.Regex สำหรับการจับคู่ Perl regex ที่รวดเร็วด้วยไวยากรณ์ที่เหมือน PCRE-b
พร้อมด้วย option -o
หรือด้วย option -u
ugrep จะแสดงออฟเซ็ตไบต์ที่แน่นอนของการจับคู่รูปแบบแทนที่จะเป็นไบต์ออฟเซ็ตของจุดเริ่มต้นของบรรทัดที่ตรงกันที่รายงานโดย GNU/BSD grep-u
, --ungroup
เพื่อไม่ให้จัดกลุ่มการแข่งขันหลายรายการต่อบรรทัด ตัวเลือกนี้จะแสดงบรรทัดอินพุตที่ตรงกันอีกครั้งสำหรับการจับคู่รูปแบบเพิ่มเติมแต่ละรายการในบรรทัด ตัวเลือกนี้มีประโยชน์อย่างยิ่งกับตัวเลือก -c
เพื่อรายงานจำนวนรวมของรูปแบบที่ตรงกันต่อไฟล์ แทนที่จะเป็นจำนวนบรรทัดที่ตรงกันต่อไฟล์-Y
เปิดใช้งานการจับคู่รูปแบบว่าง การทำ Grepping ด้วยรูปแบบการจับคู่ที่ว่างเปล่านั้นแปลกและให้ผลลัพธ์ที่แตกต่างกันกับ GNU grep กับ BSD grep การจับคู่ที่ว่างเปล่าจะไม่ส่งออกตาม ugrep ตามค่าเริ่มต้น ซึ่งจะช่วยหลีกเลี่ยงข้อผิดพลาดที่อาจทำให้เกิดผลลัพธ์ "สุ่ม" ตัวอย่างเช่น ด้วย GNU/BSD grep รูปแบบ a*
จะจับคู่ทุกบรรทัดในอินพุต และจริงๆ แล้วจับคู่ xyz
สามครั้ง (ช่วงการเปลี่ยนภาพว่างก่อนและระหว่าง x
, y
และ z
) การอนุญาตให้มีการจับคู่ที่ว่างเปล่าต้องใช้ตัวเลือก ugrep -Y
รูปแบบที่ขึ้นต้นด้วย ^
หรือลงท้ายด้วย $
เช่น ^h*$
จะจับคู่ค่าว่าง รูปแบบเหล่านี้จะเปิดใช้งานตัวเลือก -Y
โดยอัตโนมัติ-D, --devices=ACTION
ถูก skip
ตามค่าเริ่มต้นแทนที่จะ read
วิธีนี้จะป้องกันการค้างบนไปป์ที่มีชื่อในไดเร็กทอรีที่ถูกค้นหาแบบวนซ้ำโดยไม่คาดคิด ดังที่อาจเกิดขึ้นกับ GNU/BSD grep ที่ read
อุปกรณ์ตามค่าเริ่มต้น-d, --directories=ACTION
ถูก skip
โดยค่าเริ่มต้น แทนที่จะ read
ตามค่าเริ่มต้น ไดเร็กทอรีที่ระบุบนบรรทัดคำสั่งจะถูกค้นหา แต่จะไม่ได้เจาะลึกเข้าไปในไดเร็กทอรีย่อยแบบเรียกซ้ำ-N PATTERN
ซึ่งเป็นรูปแบบของแบบฟอร์ม (?^X)
ที่ข้ามอินพุต X
ทั้งหมด ดังนั้นจะลบ X
ออกจากการค้นหา ตัวอย่างเช่น รูปแบบเชิงลบสามารถใช้เพื่อข้ามสตริงและความคิดเห็นเมื่อค้นหาตัวระบุในซอร์สโค้ด และค้นหารายการที่ตรงกันซึ่งไม่ได้อยู่ในสตริงและความคิดเห็น รูปแบบ zap
ที่กำหนดไว้ล่วงหน้าใช้รูปแบบเชิงลบ เช่น ใช้ -f cpp/zap_comments
เพื่อละเว้นการจับคู่รูปแบบในความคิดเห็น C++GREP_OPTIONS
เนื่องจากพฤติกรรมของ ugrep จะต้องพกพาได้และสามารถคาดเดาได้ในทุกระบบ GNU grep ละทิ้ง GREP_OPTIONS
ด้วยเหตุผลนี้ โปรดใช้คำสั่ง ug
ที่โหลดไฟล์การกำหนดค่า .ugrep ที่อยู่ในไดเร็กทอรีการทำงานหรือในโฮมไดเร็กทอรีเมื่อมีอยู่ หรือใช้นามแฝงของเชลล์เพื่อสร้างคำสั่งใหม่พร้อมตัวเลือกการค้นหาเฉพาะ- กลับไปที่สารบัญ
หากต้องการดำเนินการค้นหาโดยใช้ไฟล์กำหนดค่า .ugrep
ที่อยู่ในไดเร็กทอรีทำงานหรือโฮมไดเร็กตอรี่ (โปรดทราบว่า ug
เหมือนกับ ugrep --config
):
ug PATTERN FILE...
หากต้องการบันทึกไฟล์การกำหนดค่า .ugrep
ลงในไดเร็กทอรีการทำงาน ให้แก้ไขไฟล์นี้ในไดเร็กทอรีหลักของคุณเพื่อปรับแต่งค่ากำหนดสำหรับค่าเริ่มต้นของ ug
:
ug --save-config
หากต้องการค้นหาไดเร็กทอรีการทำงานและเจาะลึก main
ซ้ำ ๆ (โปรดทราบว่า -r
recurse symlinks ถูกเปิดใช้งานตามค่าเริ่มต้นหากไม่มีการระบุอาร์กิวเมนต์ของไฟล์):
ug main
เหมือนกัน แต่ค้นหาเฉพาะไฟล์ซอร์สโค้ด C ++ ซ้ำ ๆ โดยไม่สนใจไฟล์อื่น ๆ ทั้งหมด:
ug -tc++ main
เช่นเดียวกัน การใช้ TUI คิวรีแบบโต้ตอบ เริ่มต้นด้วยรูปแบบการค้นหาเริ่มต้น main
(โปรดทราบว่า -Q
ที่มีรูปแบบเริ่มต้นต้องใช้ตัวเลือก -e
เนื่องจากโดยปกติแล้วรูปแบบจะถูกระบุแบบโต้ตอบและอาร์กิวเมนต์บรรทัดคำสั่งทั้งหมดถือเป็นไฟล์/ไดเร็กทอรี):
ug -Q -tc++ -e main
หากต้องการค้นหา #define
(และ # define
ฯลฯ ) โดยใช้รูปแบบ regex ในไฟล์ C++ (โปรดทราบว่าควรอ้างอิงรูปแบบเพื่อป้องกันการใช้เชลล์ *
และ ?
):
ug -tc++ '#[t ]*define'
หากต้องการค้นหา main
เป็นคำ ( -w
) ซ้ำ ๆ โดยไม่ต้องติดตาม symlink ( -r
) ในไดเร็กทอรี myproject
โดยแสดงหมายเลขบรรทัดที่ตรงกัน ( -n
) และคอลัมน์ ( -k
) ถัดจากบรรทัดที่ตรงกัน:
ug -r -nkw main myproject
เหมือนกัน แต่ค้นหาเฉพาะ myproject
โดยไม่ต้องเรียกซ้ำอีกครั้ง (โปรดทราบว่าอาร์กิวเมนต์ของไดเรกทอรีจะถูกค้นหาในระดับหนึ่งตามค่าเริ่มต้น):
ug -nkw main myproject
เหมือนกัน แต่ค้นหา myproject
และหนึ่งระดับไดเรกทอรีย่อยที่ลึกลงไป (สองระดับ) ด้วย -2
:
ug -2 -nkw main myproject
เหมือนกัน แต่ค้นหาเฉพาะไฟล์ C++ ใน myproject
และไดเรกทอรีย่อยด้วย -tc++
:
ug -tc++ -2 -nkw main myproject
เหมือนกัน แต่ยังค้นหาภายในไฟล์เก็บถาวร (เช่นไฟล์ zip และ tar) และไฟล์บีบอัดด้วย -z
:
ug -z -tc++ -2 -nkw main myproject
ค้นหาไดเร็กทอรีการทำงานซ้ำ ๆ สำหรับ main
ในขณะที่ละเว้นไฟล์ gitignored (เช่นสมมติว่า .gitignore
อยู่ในไดเร็กทอรีทำงานหรือต่ำกว่า):
ug --ignore-files -tc++ -nkw main
หากต้องการแสดงรายการไฟล์ทั้งหมดในไดเร็กทอรีการทำงานและส่วนลึกที่ไม่ถูกละเลยโดยไฟล์ . .gitignore
:
ug --ignore-files -l ''
หากต้องการแสดงรายการนามสกุลไฟล์และ "magic bytes" (shebangs) ที่ถูกค้นหาโดยสอดคล้องกับอาร์กิวเมนต์ -t
:
ug -tlist
หากต้องการแสดงรายการไฟล์เชลล์ทั้งหมดแบบวนซ้ำตามนามสกุลและ shebangs ด้วย -l
(โปรดทราบว่า ''
ตรงกับไฟล์ที่ไม่ว่างเปล่า):
ug -l -tShell ''
- กลับไปที่สารบัญ
หากต้องการค้นหา main
ในซอร์สโค้ดโดยไม่สนใจสตริงและบล็อกความคิดเห็น คุณสามารถใช้ รูปแบบเชิงลบ พร้อมตัวเลือก -N
เพื่อข้ามการจับคู่ที่ไม่ต้องการในสตริงที่ยกมาและบล็อกความคิดเห็นของ C/C++:
ug -r -nkw -e 'main' -N '"(\.|\r?n|[^\n"])*"|//.*|/*(.*n)*?.**+/' myproject
งานนี้มีเยอะมากต้องพิมพ์ให้ถูกต้อง! หากคุณเป็นเหมือนฉัน ฉันไม่ต้องการใช้เวลาเล่นซอกับรูปแบบ regex เมื่อฉันกำลังทำงานบางอย่างที่สำคัญกว่า มีวิธีที่ง่ายขึ้นโดยใช้รูปแบบที่กำหนดไว้ล่วงหน้าของ UGREP ( -f
) ที่ติดตั้งด้วยเครื่องมือ ugrep
:
ug -r -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
แบบสอบถามนี้ยังค้นหาผ่านไฟล์อื่น ๆ นอกเหนือจากซอร์สโค้ด c/c ++ เช่น readmes, makefiles และอื่น ๆ นอกจากนี้เรายังข้าม symlinks ด้วย -r
ดังนั้นลองปรับแต่งคิวรีนี้โดยเลือกไฟล์ C/C ++ โดยใช้ตัวเลือก -tc,c++
และรวม Symlinks ไปยังไฟล์และไดเรกทอรีด้วย -R
:
ug -R -tc,c++ -nkw 'main' -f c/zap_strings -f c/zap_comments myproject
ถ้าคุณต้องการมองหาตัวระบุ main
แต่ไม่ใช่ฟังก์ชั่น main(
ในกรณีนี้ให้ใช้รูปแบบเชิงลบสำหรับสิ่งนี้เพื่อข้าม mainh*(
การจับคู่รูปแบบ:
ug -R -tc,c++ -nkw -e 'main' -N 'mainh*(' -f c/zap_strings -f c/zap_comments myproject
สิ่งนี้ใช้ตัวเลือก -e
และ -N
เพื่อระบุรูปแบบและรูปแบบเชิงลบอย่างชัดเจนตามลำดับซึ่งเป็นหลักการสร้างรูปแบบ main|(?^mainh*()
โดยที่ h
ตรงกับพื้นที่และแท็บโดยทั่วไป รูปแบบเชิงลบมีประโยชน์ในการกรองการจับคู่รูปแบบที่เราไม่สนใจ
เป็นอีกตัวอย่างหนึ่งสมมติว่าเราอาจต้องการค้นหาคำว่า FIXME
ในบล็อกความคิดเห็น C/C ++ ในการทำเช่นนั้นก่อนอื่นเราสามารถเลือกบล็อกความคิดเห็นด้วยรูปแบบ c/comments
ที่กำหนดไว้ล่วงหน้าของ UGREP จากนั้นเลือกบรรทัดด้วย FIXME
โดยใช้ท่อ:
ug -R -tc,c++ -nk -f c/comments myproject | ug -w 'FIXME'
การกรองผลลัพธ์ด้วยท่อโดยทั่วไปนั้นง่ายกว่าการใช้และตรรกะหรือตรรกะที่เครื่องมือค้นหาบางอย่างใช้ วิธีการนี้เป็นไปตามจิตวิญญาณของ UNIX เพื่อให้ระบบสาธารณูปโภคง่ายและใช้ร่วมกันสำหรับงานที่ซับซ้อนมากขึ้น
มาสร้างรายการที่จัดเรียงของตัวระบุทั้งหมดที่พบในซอร์สโค้ด Java ในขณะที่ข้ามสตริงและความคิดเห็น:
ug -R -tjava -f java/names myproject | sort -u
สิ่งนี้ตรงกับตัวระบุ java unicode โดยใช้ regex p{JavaIdentifierStart}p{JavaIdentifierPart}*
กำหนดไว้ใน patterns/java/names
ด้วยเครื่องมือ GREP และ GREP แบบดั้งเดิมมันใช้ความพยายามอย่างมากในการค้นหาไฟล์ต้นฉบับ C/C ++ ที่กำหนดฟังก์ชั่น qsort
อย่างซ้ำซากซึ่งต้องการสิ่งนี้:
ug -R --include='*.c' --include='*.cpp' '^([ t]*[[:word:]:*&]+)+[ t]+qsort[ t]*([^;n]+$' myproject
โชคดีที่ด้วย UGREP เราสามารถเลือกคำจำกัดความของฟังก์ชั่นทั้งหมดในไฟล์ที่มีส่วนขยาย .c
หรือ .cpp
โดยใช้ตัวเลือก -Oc,cpp
และโดยใช้ functions
รูปแบบที่กำหนดไว้ล่วงหน้าซึ่งติดตั้งด้วยเครื่องมือเพื่อสร้างคำจำกัดความฟังก์ชั่นทั้งหมด จากนั้นเราเลือกอันที่เราต้องการ:
ug -R -Oc,cpp -nk -f c/functions | ug 'qsort'
โปรดทราบว่าเราสามารถใช้ -tc,c++
เพื่อเลือกไฟล์ C/C ++ แต่สิ่งนี้ยังรวมถึงไฟล์ส่วนหัวเมื่อเราต้องการค้นหาไฟล์ .c
และ .cpp
เท่านั้น
นอกจากนี้เรายังสามารถข้ามไฟล์และไดเรกทอรีจากการค้นหาที่กำหนดไว้ใน. .gitignore
ในการทำเช่นนั้นเราใช้ --ignore-files
เพื่อยกเว้นไฟล์และไดเรกทอรีใด ๆ จากการค้นหาแบบเรียกซ้ำที่ตรงกับ globs ใน .gitignore
เมื่อพบไฟล์ .gitignore
gitignore หนึ่งไฟล์ขึ้นไป:
ug -R -tc++ --ignore-files -f c++/defines
สิ่งนี้จะค้นหาไฟล์ C ++ ( -tc++
) ในไดเรกทอรีการทำงานสำหรับสาย #define
( -f c++/defines
) ในขณะที่ข้ามไฟล์และไดเรกทอรีที่ประกาศใน. .gitignore
หากคุณพบสิ่งนี้นานเกินไปที่จะพิมพ์ให้กำหนดนามแฝงเพื่อค้นหาไดเรกทอรี gitHub:
alias ugit='ugrep -R --ignore-files'
ugit -tc++ -f c++/defines
เพื่อเน้นการจับคู่เมื่อผลักผ่านห่วงโซ่ของท่อเราควรใช้ --color=always
:
ugit --color=always -tc++ -f c++/defines | ugrep -w 'FOO.*'
สิ่งนี้จะส่งคืนรายการสีที่มีสีสูงของ #define FOO...
มาโครในไฟล์ซอร์สโค้ด C/C ++, ข้ามไฟล์ที่กำหนดไว้ใน. .gitignore
โปรดทราบว่าส่วนประกอบของ --exclude
ไม่ใช่ --include
เนื่องจากการยกเว้นมักจะมีความสำคัญมากกว่าการรวมดังนั้นเราจึงไม่สามารถแสดงรายการไฟล์ที่ถูกละเว้นด้วย --include-from='.gitignore'
มีเพียงไฟล์ที่ระบุไว้อย่างชัดเจนกับ --include
รวมถึงไดเรกทอรีที่ระบุไว้อย่างชัดเจนด้วย --include-dir
--include-from
จากรายการ Globs ที่ได้รับการพิจารณาทั้งไฟล์และไดเรกทอรีเพื่อเพิ่ม --include
และ --include-dir
ตามลำดับ ซึ่งหมายความว่าเมื่อชื่อไดเรกทอรีและเส้นทางไดเรกทอรีไม่ได้แสดงรายการอย่างชัดเจนในไฟล์นี้จะไม่ถูกเยี่ยมชมโดยใช้ --include-from
เนื่องจาก UGREP ตรวจสอบว่าอินพุตเป็น unicode ที่เข้ารหัส UTF ที่ถูกต้อง (เว้นแต่ -U
ใช้) จึงเป็นไปได้ที่จะใช้เป็นตัวกรองเพื่อละเว้นเอาต์พุตที่ไม่ใช่ UTF ที่ผลิตโดยโปรแกรม:
program | ugrep -I ''
หากโปรแกรมสร้างเอาต์พุตที่ถูกต้องแล้วเอาต์พุตจะถูกส่งผ่านมิฉะนั้นเอาต์พุตจะถูกกรองตัวเลือก -I
หากเอาต์พุตเริ่มต้นในตอนแรกสำหรับส่วนที่มีขนาดใหญ่มาก แต่ตามมาด้วยเอาต์พุตที่ไม่ถูกต้อง UGREP อาจแสดงผลลัพธ์ในตอนแรก แต่ไม่รวมเอาต์พุตที่ไม่ถูกต้องหลังจากนั้นเอาต์พุตเพิ่มเติมจะถูกบล็อก
เพื่อกรองเส้นที่ถูกต้อง ASCII หรือ UTF ที่เข้ารหัสในขณะที่ลบบรรทัดที่ไม่ได้:
program | ugrep '[p{Unicode}--[n]]+'
โปรดทราบว่า p{Unicode}
ตรงกับ n
แต่เราไม่ต้องการจับคู่ไฟล์ทั้งหมด! เพียงแค่เส้นที่มี [p{Unicode}--[n]]+
- กลับไปที่สารบัญ
หน้า Ugrep Man:
man ugrep
เพื่อแสดงหน้าวิธีใช้:
ug --help
เพื่อแสดงตัวเลือกที่กล่าวถึง WHAT
:
ug --help WHAT
เพื่อแสดงรายการตัวเลือก -t TYPES
:
ug -tlist
ในการสืบค้นแบบอินเทอร์แอคทีฟ TUI ให้กด F1 หรือ Ctrl-Z เพื่อขอความช่วยเหลือและตัวเลือก:
ug -Q
- กลับไปที่สารบัญ
--config[=FILE], ---[FILE]
Use configuration FILE. The default FILE is `.ugrep'. The working
directory is checked first for FILE, then the home directory. The
options specified in the configuration FILE are parsed first,
followed by the remaining options specified on the command line.
The ug command automatically loads a `.ugrep' configuration file,
unless --config=FILE or --no-config is specified.
--no-config
Do not load the default .ugrep configuration file.
--save-config[=FILE] [OPTIONS]
Save configuration FILE to include OPTIONS. Update FILE when
first loaded with --config=FILE. The default FILE is `.ugrep',
which is automatically loaded by the ug command. When FILE is a
`-', writes the configuration to standard output. Only part of the
OPTIONS are saved that do not cause searches to fail when combined
with other options. Additional options may be specified by editing
the saved configuration file. A configuration file may be modified
manually to specify one or more config[=FILE] to indirectly load
the specified FILEs, but recursive config loading is not allowed.
คำสั่ง ug
มีไว้สำหรับการค้นหาแบบโต้ตอบที่ขึ้นกับบริบทและเทียบเท่ากับคำสั่ง ugrep --config
เพื่อโหลดไฟล์การกำหนดค่า .ugrep
เมื่ออยู่ในไดเรกทอรีการทำงานหรือเมื่อไม่พบในโฮมไดเร็กตอรี่:
ug PATTERN ...
ugrep --config PATTERN ...
คำสั่ง ug
ยังเรียงลำดับไฟล์ตามชื่อต่อไดเรกทอรีที่ค้นหา ไฟล์การกำหนดค่ามีคู่ NAME=VALUE
ต่อบรรทัดโดยที่ NAME
คือชื่อของตัวเลือกยาว (ไม่มี --
) และ =VALUE
เป็นอาร์กิวเมนต์ซึ่งเป็นทางเลือกและอาจถูกละเว้นขึ้นอยู่กับตัวเลือก เส้นที่ว่างเปล่าและบรรทัดเริ่มต้นด้วย #
จะถูกละเว้น:
# Color scheme
colors=cx=hb:ms=hiy:mc=hic:fn=hi+y+K:ln=hg:cn=hg:bn=hg:se=
# Disable searching hidden files and directories
no-hidden
# ignore files specified in .ignore and .gitignore in recursive searches
ignore-files=.ignore
ignore-files=.gitignore
ตัวเลือกบรรทัดคำสั่งจะถูกแยกวิเคราะห์ในลำดับต่อไปนี้: ก่อนที่จะโหลดไฟล์กำหนดค่า (ค่าเริ่มต้นหรือชื่อ) แล้วตัวเลือกที่เหลือและอาร์กิวเมนต์ในบรรทัดคำสั่งจะถูกแยกวิเคราะห์
ตัวเลือก --stats
แสดงไฟล์การกำหนดค่าที่ใช้หลังจากค้นหา
ไฟล์การกำหนดค่าที่มีชื่อมีวัตถุประสงค์เพื่อปรับปรุงงานการค้นหาที่กำหนดเองโดยลดจำนวนตัวเลือกบรรทัดคำสั่งเป็นไฟล์เดียว ---FILE
เพื่อใช้คอลเลกชันของตัวเลือกที่ระบุใน FILE
ตัวเลือก --config=FILE
และแบบฟอร์มตัวย่อ ---FILE
โหลดไฟล์กำหนดค่าที่ระบุไว้ในไดเรกทอรีการทำงานหรือเมื่อไม่พบอยู่ในไดเรกทอรีโฮมไดเรกทอรี:
ug ---FILE PATTERN ...
ugrep ---FILE PATTERN ...
ข้อผิดพลาดจะเกิดขึ้นเมื่อไม่พบ FILE
หรือไม่สามารถอ่านได้
ไฟล์การกำหนดค่าที่มีชื่อสามารถใช้เพื่อกำหนดคอลเลกชันของตัวเลือกที่เฉพาะเจาะจงกับข้อกำหนดของงานในเวิร์กโฟลว์การพัฒนาของโครงการ ตัวอย่างเช่นเพื่อรายงานปัญหาที่ไม่ได้รับการแก้ไขโดยการตรวจสอบซอร์สโค้ดและเอกสารประกอบสำหรับความคิดเห็นด้วยรายการ FixMe และ Tode ไฟล์การกำหนดค่าที่มีชื่อดังกล่าวสามารถแปลเป็นภาษาท้องถิ่นกับโครงการโดยวางไว้ในไดเรกทอรีโครงการหรือสามารถทำทั่วโลกได้โดยวางไว้ในโฮมไดเร็กตอรี่ สำหรับข้อเสนอแนะด้วยภาพสามารถระบุรูปแบบสีที่เฉพาะเจาะจงสำหรับงานนี้ด้วย colors
ตัวเลือกใน FILE
การกำหนดค่าเพื่อช่วยระบุผลลัพธ์ที่ผลิตโดยการกำหนดค่าที่มีชื่อเมื่อเทียบกับการกำหนดค่าเริ่มต้น
ตัวเลือก --save-config
บันทึกไฟล์การกำหนดค่า .ugrep
ไปยังไดเรกทอรีการทำงานโดยใช้การกำหนดค่าปัจจุบันที่โหลดด้วย --config
สิ่งนี้จะบันทึกการกำหนดค่าปัจจุบันรวมกับตัวเลือกเพิ่มเติมเมื่อระบุด้วย เฉพาะตัวเลือกเหล่านั้นที่ไม่สามารถขัดแย้งกับตัวเลือกและตัวเลือกอื่น ๆ ที่ไม่สามารถบันทึกผลการค้นหาในทางลบเท่านั้น
ตัวเลือก --save-config=FILE
บันทึกการกำหนดค่าไปยัง FILE
ที่ระบุ การกำหนดค่าถูกเขียนไปยังเอาต์พุตมาตรฐานเมื่อ FILE
คือ -
อีกวิธีหนึ่งคือไฟล์การกำหนดค่าอาจถูกสร้างหรือแก้ไขด้วยตนเอง ไฟล์การกำหนดค่าอาจรวมถึง config[=FILE]
อย่างน้อยหนึ่งรายการเพื่อโหลด FILE
specfified ทางอ้อม แต่ห้ามโหลดการกำหนดค่าแบบเรียกซ้ำ วิธีที่ง่ายที่สุดในการผลิตสร้างไฟล์การกำหนดค่าคือการระบุ config
ที่ด้านบนของไฟล์ตามด้วยตัวเลือกยาวเพื่อแทนที่ค่าเริ่มต้น
- กลับไปที่สารบัญ
-Q[=DELAY], --query[=DELAY]
Query mode: start a TUI to perform interactive searches. This mode
requires an ANSI capable terminal. An optional DELAY argument may
be specified to reduce or increase the response time to execute
searches after the last key press, in increments of 100ms, where
the default is 3 (300ms delay). No whitespace may be given between
-Q and its argument DELAY. Initial patterns may be specified with
-e PATTERN, i.e. a PATTERN argument requires option -e. Press F1
or CTRL-Z to view the help screen. Press F2 or CTRL-Y to invoke a
command to view or edit the file shown at the top of the screen.
The command can be specified with option --view, or defaults to
environment variable PAGER when defined, or EDITOR. Press Tab and
Shift-Tab to navigate directories and to select a file to search.
Press Enter to select lines to output. Press ALT-l for option -l
to list files, ALT-n for -n, etc. Non-option commands include
ALT-] to increase context. See also options --no-confirm, --delay,
--split and --view.
--no-confirm
Do not confirm actions in -Q query TUI. The default is confirm.
--delay=DELAY
Set the default -Q key response delay. Default is 3 for 300ms.
--split
Split the -Q query TUI screen on startup.
--view[=COMMAND]
Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y.
ตัวเลือกนี้เริ่มต้นอินเทอร์เฟซผู้ใช้เพื่อป้อนรูปแบบการค้นหาแบบโต้ตอบ:
-c
เพื่อนับการจับคู่ กด Alt -C อีกครั้งปิดใช้งาน -c
ตัวเลือกสามารถสลับกับปุ่ม ALT ในขณะที่ค้นหาหรือเมื่อดูหน้าจอวิธีใช้ หากไม่รองรับปุ่ม Alt/Meta (เช่น x11 x11) จากนั้นกด Ctrl-O ตามด้วยคีย์ที่สอดคล้องกับตัวเลือก-g
ไฟล์และไดเรกทอรีที่ตรงกัน GLOBS รายการรูปแบบลูกโลกสไตล์ Gitignore ที่คั่นด้วยเครื่องหมายจุลภาค กด ESC ส่งคืนการควบคุมไปยังพรอมต์รูปแบบการสืบค้น (บันทึกลูกโลก) เมื่อลูกโลกถูกนำหน้าด้วย A !
หรือ A ^
, ข้ามไฟล์ที่มีชื่อตรงกับลูกโลกเมื่อ GLOB มีชื่อ A /
, Full Pathname ถูกจับคู่ มิฉะนั้นจะมีการจับคู่ชื่อ basenames เมื่อลูกโลกจบลงด้วย A /
, ไดเรกทอรีถูกจับคู่Q>
(ปกติ), F>
(สตริงคงที่), G>
(regex พื้นฐาน), P>
(การจับคู่ perl) และ Z>
(การจับคู่ฟัซซี่) เมื่อมีการแสดงพรอมต์ --glob=
แสดงรายการรูปแบบลูกโลกสไตล์ Gitignore ที่คั่นด้วยเครื่องหมายจุลภาค กด ESC ส่งคืนการควบคุมไปยังพรอมต์รูปแบบ--view
--view=COMMAND
มิฉะนั้นตัวแปรสภาพแวดล้อม PAGER
หรือ EDITOR
จะใช้ในการเรียกใช้คำสั่งด้วย ctrl-y ชื่อไฟล์จะต้องเปิดใช้งานและมองเห็นได้ในเอาต์พุตเพื่อใช้คุณสมบัตินี้--color
สีDELAY
ต่ำเช่น 1 อย่างไรก็ตามค่าที่ต่ำกว่าอาจเพิ่มการโหลดของระบบอันเป็นผลมาจากการเริ่มต้นและยกเลิกการค้นหาซ้ำ ๆ โดยแต่ละคีย์กด--heading
การเปิดใช้งานการเปิดใช้งานโดยค่าเริ่มต้น กด Alt-+ เพื่อปิดส่วนหัวQuery Tui Mapping:
คีย์ | การทำงาน |
---|---|
Alt-key | สลับตัวเลือกบรรทัดคำสั่ง UGREP ที่สอดคล้องกับ key |
Alt-/ xxxx / | แทรก UNICODE HEX CODE POINT U+XXXX |
Esc Ctrl-C | ย้อนกลับหรือออก |
Ctrl-Q | ออกอย่างรวดเร็วและส่งออกผลลัพธ์ที่เลือกในโหมดการเลือก |
Tab | chdir ไปยังไดเรกทอรีของไฟล์ที่แสดงที่ด้านบนของหน้าจอหรือเลือกไฟล์ |
Shift-Tab | chdir หนึ่งระดับขึ้นหรือยกเลิกการเลือกไฟล์ |
Enter | เข้าสู่โหมดการเลือกและสลับบรรทัดที่เลือกเพื่อส่งออกเมื่อออกจากทางออก |
Up Ctrl-P | เลื่อนขึ้น |
Down Ctrl-N | เลื่อนลง |
Left Ctrl-B | ย้ายไปทางซ้าย |
Ctrl-F Right | ย้ายไปทางขวา |
PgUp Ctrl-G | ย้ายแสดงตามหน้าเว็บ |
PgDn Ctrl-D | ย้ายจอแสดงผลตามหน้าเว็บ |
Alt-Up | ย้ายแสดงขึ้นโดย 1/2 หน้า (macOS Shift-Up ) |
Alt-Down | ย้ายแสดงลงโดย 1/2 หน้า (macOS Shift-Down ) |
Alt-Left | ย้ายจอแสดงผลทางซ้ายโดยหน้า 1/2 (MacOS Shift-Left ) |
Alt-Right | ย้ายจอแสดงผลโดย 1/2 หน้า (macOS Shift-Right ) |
Home Ctrl-A | ย้ายเคอร์เซอร์ไปที่จุดเริ่มต้นของเส้น |
End Ctrl-E | ย้ายเคอร์เซอร์ไปที่จุดสิ้นสุดของเส้น |
Ctrl-K | ลบหลังเคอร์เซอร์ |
Ctrl-L | หน้าจอรีเฟรช |
key Ctrl-O + | สลับตัวเลือกบรรทัดคำสั่ง UGREP ที่สอดคล้องกับ key เช่นเดียวกับ Alt-key |
Ctrl-R F4 | ข้ามไปที่คั่นหน้า |
Ctrl-S | ข้ามไปยัง DIR/ไฟล์/บริบทถัดไป |
Ctrl-T F5 | สลับหน้าจอแยก ( --split เริ่มต้นหน้าจอ TUI) |
Ctrl-U | ลบก่อนเคอร์เซอร์ |
Ctrl-V | ตัวละครคำต่อคำ |
Ctrl-W | กระโดดกลับหนึ่ง dir/ไฟล์/บริบท |
Ctrl-X F3 | ตั้งบุ๊คมาร์ค |
Ctrl-Y F2 | ดูหรือแก้ไขไฟล์ที่แสดงที่ด้านบนของหน้าจอ |
Ctrl-Z F1 | ดูความช่วยเหลือและตัวเลือก |
Ctrl-^ | Chdir กลับไปที่ไดเรกทอรีการทำงานเริ่มต้น |
Ctrl-] | สลับสี/โมโน |
Ctrl- | ยุติกระบวนการ |
เพื่อค้นหาไฟล์ในไดเรกทอรีการทำงานและด้านล่าง:
ug -Q
เหมือนกัน แต่ จำกัด เฉพาะไฟล์ C ++ เท่านั้นและไม่สนใจไฟล์ .gitignore
gitignore:
ug -Q -tc++ --ignore-files
เพื่อค้นหา makefiles ทั้งหมดในไดเรกทอรีการทำงานและด้านล่าง:
ug -Q -g 'Makefile*' -g 'makefile*'
เหมือนกัน แต่สำหรับไดเรกทอรีสูงสุด 2 ระดับ (การทำงานและระดับไดเรกทอรีย่อยหนึ่งระดับ):
ug -Q -2 -g 'Makefile*' -g 'makefile*'
เพื่อดูเนื้อหาของ main.cpp
และค้นหาโดยที่ -y
แสดงบรรทัดที่ไม่จับคู่เป็นบริบท:
ug -Q -y main.cpp
ในการค้นหา main.cpp
แบบโต้ตอบเริ่มต้นด้วยรูปแบบการค้นหา TODO
และบริบทการจับคู่ของ 5 บรรทัด (บริบทสามารถเปิดใช้งานและปิดใช้งานได้ซึ่งจะแทนที่ขนาดบริบทเริ่มต้นของ 2 บรรทัด):
ug -Q -C5 -e TODO main.cpp
ในการดูและค้นหาเนื้อหาของคลังเก็บ (เช่น Zip, Tarball):
ug -Q -z archive.tar.gz
หากต้องการเลือกไฟล์แบบโต้ตอบจาก project.zip
ไปยังการคลายด้วย unzip
โดยใช้โหมดการเลือก UGREP แบบสอบถาม (กด Enter เพื่อเลือกบรรทัด):
unzip project.zip `zipinfo -1 project.zip | ugrep -Q`
- กลับไปที่สารบัญ
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-l, --files-with-matches
Only the names of files containing selected lines are written to
standard output. ugrep will only search a file until a match has
been found, making searches potentially less expensive. Pathnames
are listed once per file searched. If the standard input is
searched, the string ``(standard input)'' is written.
-R, --dereference-recursive
Recursively read all files under each directory. Follow all
symbolic links to files and directories, unlike -r.
-r, --recursive
Recursively read all files under each directory, following symbolic
links only if they are on the command line. Note that when no FILE
arguments are specified and input is read from a terminal,
recursive searches are performed as if -r is specified.
-S, --dereference-files
When -r is specified, symbolic links to files are followed, but not
to directories. The default is not to follow symbolic links.
--depth=[MIN,][MAX], -1, -2, -3, ... -9, -10, -11, -12, ...
Restrict recursive searches from MIN to MAX directory levels deep,
where -1 (--depth=1) searches the specified path without recursing
into subdirectories. Note that -3 -5, -3-5, and -35 search 3 to 5
levels deep. Enables -r if -R or -r is not specified.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
หากไม่มีการระบุอาร์กิวเมนต์ไฟล์และป้อนข้อมูลจากเทอร์มินัลการค้นหาแบบเรียกซ้ำจะดำเนินการราวกับว่ามีการระบุ -r
ในการบังคับให้อ่านจากอินพุตมาตรฐานให้ระบุ -
เป็นอาร์กิวเมนต์ไฟล์
เพื่อแสดงรายการไฟล์ที่ไม่ว่างเปล่าทั้งหมดในไดเรกทอรีการทำงาน:
ug -r -l ''
เพื่อแสดงรายการไฟล์ที่ไม่ว่างเปล่าทั้งหมดในไดเรกทอรีการทำงาน แต่ไม่ลึกกว่า (เนื่องจากมีการโต้แย้งไฟล์ใน .
นี้สำหรับไดเรกทอรีการทำงาน):
ug -l '' .
เพื่อแสดงรายการไฟล์ที่ไม่ว่างเปล่าทั้งหมดในไดเรกทอรี mydir
แต่ไม่ลึกกว่า (เนื่องจากมีการโต้แย้งไฟล์):
ug -l '' mydir
เพื่อแสดงรายการไฟล์ที่ไม่ว่างเปล่าทั้งหมดในไดเรกทอรี mydir
และลึกลงไปในขณะที่ติดตาม symlinks:
ug -R -l '' mydir
หากต้องการแสดงรายการไฟล์ที่ไม่ว่างเปล่าทั้งหมดบนเส้นทางที่ระบุในขณะที่เยี่ยมชมไดเรกทอรีย่อยเท่านั้นเช่นไดเรกทอรี mydir/
และไดเรกทอรีย่อยในระดับหนึ่งที่ลึกกว่า mydir/*/
ถูกเยี่ยมชม (โปรดทราบว่า -2 -l
สามารถย่อได้ที่ -l2
):
ug -2 -l '' mydir
หากต้องการแสดงรายการไฟล์ที่ไม่ว่างเปล่าทั้งหมดในไดเรกทอรี mydir
ไม่ติดตามลิงก์สัญลักษณ์ใด ๆ (ยกเว้นเมื่ออยู่ในบรรทัดคำสั่งเช่น mydir
):
ug -rl '' mydir
หากต้องการแสดงรายการ makefiles ทั้งหมดที่ตรงกับข้อความ CPP
:
ug -l -tmake 'CPP'
เพื่อแสดงรายการ Makefile.*
การจับคู่ bin_PROGRAMS
:
ug -l -g'Makefile.*' 'bin_PROGRAMS'
เพื่อแสดงรายการไฟล์ที่ไม่ว่างเปล่าทั้งหมดด้วยส่วนขยาย. sh ด้วย -Osh
:
ug -l -Osh ''
เพื่อแสดงรายการสคริปต์เชลล์ทั้งหมดตามส่วนขยายและ shebangs ด้วย -tShell
:
ug -l -tShell ''
หากต้องการแสดงรายการสคริปต์เชลล์ทั้งหมดตามส่วนขยายเท่านั้นด้วย -tshell
:
ug -l -tshell ''
- กลับไปที่สารบัญ
--bool, -%, -%%
Specifies Boolean query patterns. A Boolean query pattern is
composed of `AND', `OR', `NOT' operators and grouping with `(' `)'.
Spacing between subpatterns is the same as `AND', `|' is the same
as `OR' and a `-' is the same as `NOT'. The `OR' operator binds
more tightly than `AND'. For example, --bool 'A|B C|D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A -B' matches
lines with `A' and not `B'. Operators `AND', `OR', `NOT' require
proper spacing. For example, --bool 'A OR B AND C OR D' matches
lines with (`A' or `B') and (`C' or `D'), --bool 'A AND NOT B'
matches lines with `A' without `B'. Quoted subpatterns are matched
literally as strings. For example, --bool 'A "AND"|"OR"' matches
lines with `A' and also either `AND' or `OR'. Parentheses are used
for grouping. For example, --bool '(A B)|C' matches lines with `A'
and `B', or lines with `C'. Note that all subpatterns in a Boolean
query pattern are regular expressions, unless -F is specified.
Options -E, -F, -G, -P and -Z can be combined with --bool to match
subpatterns as strings or regular expressions (-E is the default.)
This option does not apply to -f FILE patterns. The double short
option -%% enables options --bool --files. Option --stats displays
the Boolean search patterns applied. See also options --and,
--andnot, --not, --files and --lines.
--files
Boolean file matching mode, the opposite of --lines. When combined
with option --bool, matches a file if all Boolean conditions are
satisfied. For example, --bool --files 'A B|C -D' matches a file
if some lines match `A', and some lines match either `B' or `C',
and no line matches `D'. See also options --and, --andnot, --not,
--bool and --lines. The double short option -%% enables options
--bool --files.
--lines
Boolean line matching mode for option --bool, the default mode.
--and [[-e] PATTERN] ... -e PATTERN
Specify additional patterns to match. Patterns must be specified
with -e. Each -e PATTERN following this option is considered an
alternative pattern to match, i.e. each -e is interpreted as an OR
pattern. For example, -e A -e B --and -e C -e D matches lines with
(`A' or `B') and (`C' or `D'). Note that multiple -e PATTERN are
alternations that bind more tightly together than --and. Option
--stats displays the search patterns applied. See also options
--not, --andnot, and --bool.
--andnot [[-e] PATTERN] ...
Combines --and --not. See also options --and, --not, and --bool.
--not [-e] PATTERN
Specifies that PATTERN should not match. Note that -e A --not -e B
matches lines with `A' or lines without a `B'. To match lines with
`A' that have no `B', specify -e A --andnot -e B. Option --stats
displays the search patterns applied. See also options --and,
--andnot, and --bool.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
โปรดทราบว่าตัวเลือก --and
--not
และ --andnot
จำเป็นต้องใช้ -e PATTERN
ตัวเลือก -%
ทำให้รูปแบบทั้งหมดเป็นไปตามบูลีนโดยรองรับการดำเนินงานเชิงตรรกะต่อไปนี้ที่ระบุไว้จากระดับสูงสุดของความสำคัญต่ำที่สุด: ต่ำสุด:
ตัวดำเนินการ | ทางเลือก | ผลลัพธ์ |
---|---|---|
"x" | จับคู่ x ตามตัวอักษรและตรงตามที่ระบุไว้ (โดยใช้มาตรฐาน regex Escapes Q และ E ) | |
( ) | การจัดกลุ่มการแสดงออกของบูลีน | |
-x | NOT x | การจับคู่แบบกลับด้านเช่นการจับคู่ถ้า x ไม่ตรงกัน |
x|y | x OR y | จับคู่บรรทัดกับ x หรือ y |
xy | x AND y | จับคู่บรรทัดกับทั้ง x และ y |
x
และ y
เป็นรูปแบบย่อยที่ไม่ได้เริ่มต้นด้วยสัญลักษณ์พิเศษ |
, -
และ (
(ใช้คำพูดหรือ A Escape เพื่อให้ตรงกับสิ่งเหล่านี้);
-
และ NOT
เหมือนกันและมีความสำคัญกว่า OR
ซึ่งหมายความว่า -x|y
== (-x)|y
ตัวอย่างเช่น
|
และ OR
เหมือนกันและมีความสำคัญกว่า AND
ซึ่งหมายความว่า xy|z
== x (y|z)
ตัวอย่างเช่น;
ตัวเลือก --stats
จะแสดงการสืบค้นบูลีนในรูปแบบที่มนุษย์อ่านได้ซึ่งแปลงเป็น CNF (แบบฟอร์มปกติแบบ conjective) หลังจากการค้นหาเสร็จสิ้น หากต้องการแสดง CNF โดยไม่มีการค้นหาอ่านจากอินพุตมาตรฐานที่ถูกยกเลิกโดย EOF เช่น echo | ugrep -% '...' --stats
Subpatterns เป็นสีสูงในเอาต์พุตยกเว้นที่ NOT
ได้รับการคัดค้านด้วย (A NOT
อาจยังคงปรากฏในบรรทัดการจับคู่เมื่อใช้รูปแบบ OR-NOT เช่น x|-y
) โปรดทราบว่ารูปแบบย่อยอาจทับซ้อนกัน ในกรณีนั้นมีเพียง subpattern ที่จับคู่แรกคือสีสูง
หลายบรรทัดอาจถูกจับคู่เมื่อ Subpatterns ตรงกับ newLines อย่างไรก็ตามมีข้อยกเว้นหนึ่งข้อ: subpatterns ที่ลงท้ายด้วย (?=X)
lookaheads อาจไม่ตรงกันเมื่อ X
ครอบคลุมหลายบรรทัด
รูปแบบที่ว่างเปล่าตรงกับบรรทัดใด ๆ (มาตรฐาน GREP) ดังนั้น -% 'x|""|y'
ตรงกับทุกอย่างและ x
และ y
ไม่ได้มีสีสูง ตัวเลือก -y
ควรใช้เพื่อแสดงทุกบรรทัดเป็นบริบทตัวอย่างเช่น -y 'x|y'
การสืบค้นแบบอินเทอร์แอคทีฟที่มีลักษณะคล้าย FZF (ค้นหาบูลีนพร้อมสตริงคงที่ด้วยการจับคู่ฟัซซี่เพื่อให้ได้เช่นอักขระพิเศษสูงสุด 4 ตัวที่ตรงกับ -Z+4
ในคำที่มี -w
) กดแท็บและ alt -y เพื่อดูไฟล์ที่มีการจับคู่ กด Shift-Tab และ Alt-L เพื่อกลับไปที่รายการไฟล์ที่ตรงกัน:
ug -Q -%% -l -w -F -Z+4 --sort=best
เพื่อค้นหาไฟล์ทั้งหมดที่มีทั้ง hot
และ dog
ทุกที่ในไฟล์พร้อมตัวเลือก --files
:
ug -%% 'hot dog'
ug --files -e hot --and dog
เพื่อค้นหาเส้นที่มีทั้ง hot
และ dog
ใน myfile.txt
:
ug -% 'hot dog' myfile.txt
ug -e hot --and dog myfile.txt
เพื่อค้นหาบรรทัดที่มี place
และจากนั้น hotdog
หรือ taco
(หรือทั้งสอง) ใน myfile.txt
:
ug -% 'hotdog|taco place' myfile.txt
ug -e hotdog -e taco --and place myfile.txt
เหมือนกัน แต่ไม่รวมบรรทัดที่จับคู่ diner
:
ug -% 'hotdog|taco place -diner' myfile.txt
ug -e hotdog -e taco --and place --andnot diner myfile.txt
เพื่อค้นหาสายที่มี diner
หรือเส้นที่ตรงกับทั้ง fast
และ food
แต่ไม่ bad
ใน myfile.txt
:
ug -% 'diner|(fast food -bad)' myfile.txt
เพื่อค้นหาสายที่มี fast food
(แน่นอน) หรือเส้นที่มี diner
แต่ไม่ bad
หรือ old
ใน myfile.txt
:
ug -% '"fast food"|diner -bad -old' myfile.txt
เหมือนกัน แต่ใช้นิพจน์บูลีนที่แตกต่างกันซึ่งมีความหมายเหมือนกัน:
ug -% '"fast food"|diner -(bad|old)' myfile.txt
เพื่อค้นหาสายที่มี diner
ที่มีความหมาย good
ใน myfile.txt
(นั่นคือแสดงเส้น good
โดยไม่ต้อง diner
และแสดงเส้นกับ diner
แต่มีเพียงผู้ที่มี good
เท่านั้นซึ่งมีเหตุผล!)::
ug -% 'good|-diner' myfile.txt
ug -e good --not diner myfile.txt
เพื่อค้นหาเส้นที่มี foo
และ -bar
และ "baz"
ใน myfile.txt
(ไม่ใช่ -
และ "
ควรจับคู่โดยใช้ escapes และกับ
--and -e -bar
):
ug -% 'foo -bar "baz"' myfile.txt
ug -e foo --and -e -bar --and '"baz"' myfile.txt
ในการค้นหา myfile.cpp
สำหรับบรรทัดที่มี TODO
หรือ FIXME
แต่ไม่ใช่ทั้งสองในบรรทัดเดียวกันเช่น xor:
ug -% 'TODO|FIXME -(TODO FIXME)' myfile.cpp
ug -e TODO -e FIXME --and --not TODO --not FIXME myfile.cpp
- กลับไปที่สารบัญ
-e PATTERN, --regexp=PATTERN
Specify a PATTERN to search the input. An input line is selected
if it matches any of the specified patterns. This option is useful
when multiple -e options are used to specify multiple patterns, or
when a pattern begins with a dash (`-'), or to specify a pattern
after option -f or after the FILE arguments.
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
-L, --files-without-match
Only the names of files not containing selected lines are written
to standard output. Pathnames are listed once per file searched.
If the standard input is searched, the string ``(standard input)''
is written.
-N PATTERN, --neg-regexp=PATTERN
Specify a negative PATTERN to reject specific -e PATTERN matches
with a counter pattern. Note that longer patterns take precedence
over shorter patterns, i.e. a negative pattern must be of the same
length or longer to reject matching patterns. Option -N cannot be
specified with -P. This option may be repeated.
-v, --invert-match
Selected lines are those not matching any of the specified
patterns.
-w, --word-regexp
The PATTERN is searched for as a word, such that the matching text
is preceded by a non-word character and is followed by a non-word
character. Word-like characters are Unicode letters, digits and
connector punctuations such as underscore.
-x, --line-regexp
Select only those matches that exactly match the whole line, as if
the patterns are surrounded by ^ and $.
ดูรูปแบบการสืบค้นแบบบูลีนด้วย -%, -%%, -และ - -ไม่ใช่ตัวเลือกการสืบค้นบูลีนที่ทรงพลังกว่าตัวเลือก GNU/BSD GREP แบบดั้งเดิม
ในการแสดงบรรทัดในไฟล์ myfile.sh
แต่ไม่ตรงกับบรรทัด ^[ t]*#
:
ug -v '^[ t]*#' myfile.sh
เพื่อค้นหา myfile.cpp
สำหรับบรรทัดที่มี FIXME
และ urgent
แต่ไม่ใช่ Scotty
:
ugrep FIXME myfile.cpp | ugrep urgent | ugrep -v Scotty
เหมือนกัน แต่ใช้ -%
สำหรับแบบสอบถามบูลีน:
ug -% 'FIXME urgent -Scotty' myfile.cpp
ในการค้นหาทศนิยมโดยใช้รูปแบบ d+
ที่ไม่ได้เริ่มต้นด้วย 0
โดยใช้รูปแบบลบ 0d+
และไม่รวม 555
:
ug -e 'd+' -N '0d+' -N 555 myfile.cpp
ในการค้นหาคำที่เริ่มต้นด้วย disp
โดยไม่ต้องจับคู่ display
ผลในไฟล์ myfile.py
โดยใช้ "รูปแบบเชิงลบ" -N '/<display>'
โดยที่ -N
ระบุรูปแบบเชิงลบเพิ่มเติมเพื่อข้ามการจับคู่:
ug -e '<disp' -N '<display>' myfile.py
ในการค้นหาบรรทัดที่มี display
คำในไฟล์ myfile.py
ข้ามคำนี้ในสตริงและความคิดเห็นโดยที่ -f
ระบุรูปแบบในไฟล์ที่กำหนดรูปแบบที่กำหนดไว้ล่วงหน้าในกรณีนี้:
ug -n -w 'display' -f python/zap_strings -f python/zap_comments myfile.py
เพื่อแสดงบรรทัดที่ไม่ใช่เส้นเปล่า:
ug -x -e '.*' -N 'h*' myfile.py
เหมือนกัน แต่ใช้ -v
และ -x
กับ h*
, เช่นรูปแบบ ^h*$
:
ug -v -x 'h*' myfile.py
หากต้องการแสดงรายการไฟล์ Python ทั้งหมดที่ไม่มี display
คำทำให้คำที่เกิดขึ้นในสตริงและความคิดเห็น:
ug -RL -tPython -w 'display' -f python/zap_strings -f python/zap_comments
- กลับไปที่สารบัญ
--encoding=ENCODING
The encoding format of the input. The default ENCODING is binary
and UTF-8 which are the same. Note that option -U specifies binary
PATTERN matching (text matching is the default.)
ไฟล์ไบนารี, ASCII และ UTF-8 ไม่จำเป็นต้องมีตัวเลือกนี้ในการค้นหา นอกจากนี้ไฟล์ UTF-16 และ UTF-32 ไม่ต้องการตัวเลือกนี้ในการค้นหาโดยสมมติว่าไฟล์ UTF-16 และ UTF-32 เริ่มต้นด้วย UTF BOM (เครื่องหมายคำสั่งซื้อไบต์) ตามปกติ การเข้ารหัสไฟล์อื่น ๆ ต้องใช้ตัวเลือก --encoding=ENCODING
:
การเข้ารหัส | พารามิเตอร์ |
---|---|
ASCII | ไม่มี |
UTF-8 | ไม่มี |
UTF-16 กับ BOM | ไม่มี |
UTF-32 พร้อม BOM | ไม่มี |
utf-16 be w/o bom | UTF-16 หรือ UTF-16BE |
utf-16 le w/o bom | UTF-16LE |
UTF-32 w/o bom | UTF-32 หรือ UTF-32BE |
UTF-32 w/o bom | UTF-32LE |
ละติน -1 | LATIN1 หรือ ISO-8859-1 |
ISO-8859-1 | ISO-8859-1 |
ISO-8859-2 | ISO-8859-2 |
ISO-8859-3 | ISO-8859-3 |
ISO-8859-4 | ISO-8859-4 |
ISO-8859-5 | ISO-8859-5 |
ISO-8859-6 | ISO-8859-6 |
ISO-8859-7 | ISO-8859-7 |
ISO-8859-8 | ISO-8859-8 |
ISO-8859-9 | ISO-8859-9 |
ISO-8859-10 | ISO-8859-10 |
ISO-8859-11 | ISO-8859-11 |
ISO-8859-13 | ISO-8859-13 |
ISO-8859-14 | ISO-8859-14 |
ISO-8859-15 | ISO-8859-15 |
ISO-8859-16 | ISO-8859-16 |
MAC (CR = NEWLINE) | MAC |
Macroman (cr = newline) | MACROMAN |
เอ็บซีดิก | EBCDIC |
รหัส DOS หน้า 437 | CP437 |
รหัส dos หน้า 850 | CP850 |
รหัส DOS หน้า 858 | CP858 |
รหัส Windows หน้า 1250 | CP1250 |
รหัส Windows หน้า 1251 | CP1251 |
รหัส Windows หน้า 1252 | CP1252 |
รหัส Windows หน้า 1253 | CP1253 |
รหัส Windows หน้า 1254 | CP1254 |
รหัส Windows หน้า 1255 | CP1255 |
รหัส Windows หน้า 1256 | CP1256 |
รหัส Windows หน้า 1257 | CP1257 |
รหัส Windows หน้า 1258 | CP1258 |
koi8-r | KOI8-R |
koi8-u | KOI8-U |
Koi8-ru | KOI8-RU |
โปรดทราบว่ารูปแบบ regex จะถูกระบุไว้เสมอใน UTF-8 (รวมถึง ASCII) ในการค้นหาไฟล์ไบนารีที่มีรูปแบบไบนารีดูการค้นหาและแสดงไฟล์ไบนารีด้วย -u, -w และ -x
หากต้องการแสดงรายการไฟล์ทั้งหมดที่เป็น ASCII (เช่น 7 บิต):
ug -L '[^[:ascii:]]'
หากต้องการแสดงรายการไฟล์ทั้งหมดที่ไม่ใช่ ASCII เช่น UTF-8, UTF-16 และ UTF-32 ไฟล์ที่มีอักขระ Unicode ที่ไม่ใช่ ASCII (U+0080 ขึ้นไป):
ug -l '[^[:ascii:]]'
เพื่อตรวจสอบว่าไฟล์มี Unicode ที่ไม่ใช่ ASCII (U+0080 ขึ้นไป):
ug -q '[^[:ascii:]]' myfile && echo "contains Unicode"
ในการลบอักขระ Unicode ที่ไม่ถูกต้องจากไฟล์ (โปรดทราบว่า -o
อาจไม่ทำงานเนื่องจากตรวจพบข้อมูลไบนารีและปฏิเสธและเพิ่มใหม่ แต่ --format="%o%
ไม่ตรวจสอบไบนารีและคัดลอกการจับคู่" ตามที่เป็น " ):
ug "[p{Unicode}n]" --format="%o" badfile.txt
หากต้องการแสดงรายการไฟล์ที่มีเนื้อหา UTF ที่ไม่ถูกต้อง (เช่นลำดับหรือไฟล์ไบต์ที่ไม่ถูกต้อง UTF-8 ไบต์หรือไฟล์ที่มีคะแนนรหัส UTF-8/16/32 ใด ๆ ที่อยู่นอกช่วง Unicode ที่ถูกต้อง .
โดยการจับคู่จุดรหัสใด ๆ กับ และโดยใช้รูปแบบเชิงลบ -N 'p{Unicode}'
เพื่อละเว้นอักขระ Unicode ที่ถูกต้องแต่ละตัว:
ug -l -e '.' -N 'p{Unicode}'
เพื่อแสดงเส้นที่มีอีโมจิใบหน้าหัวเราะ:
ug '[?-?]' emojis.txt
ผลลัพธ์เดียวกันนี้ได้รับโดยใช้ x{hhhh}
เพื่อเลือกช่วงอักขระ Unicode:
ug '[x{1F600}-x{1F60F}]' emojis.txt
ในการแสดงบรรทัดที่มีชื่อGödel (หรือ Goedel), Escher หรือ Bach:
ug 'G(ö|oe)del|Escher|Bach' GEB.txt wiki.txt
ในการค้นหา lorem
ในตัวพิมพ์เล็กหรือบนในไฟล์ UTF-16 ที่ทำเครื่องหมายด้วย UTF-16 BOM:
ug -iw 'lorem' utf16lorem.txt
ในการค้นหา utf16lorem.txt เมื่อไฟล์นี้ไม่มี UTF-16 BOM โดยใช้ --encoding
:
ug --encoding=UTF-16 -iw 'lorem' utf16lorem.txt
ในการค้นหาไฟล์ spanish-iso.txt
ที่เข้ารหัสใน ISO-8859-1:
ug --encoding=ISO-8859-1 -w 'año' spanish-iso.txt
- กลับไปที่สารบัญ
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
หลายบรรทัดอาจถูกจับคู่ด้วยรูปแบบที่ตรงกับอักขระใหม่ ใช้ตัวเลือก -o
เพื่อส่งออกการแข่งขันเท่านั้นไม่ใช่บรรทัดเต็มที่ตรงกัน
เพื่อให้ตรงกับการแบ่งบรรทัด n
ให้รวม n
ในรูปแบบเพื่อให้ตรงกับอักขระ LF หากคุณต้องการจับคู่ rn
และ n
breaks ให้ใช้ r?n
หรือเพียงแค่ใช้ R
เพื่อให้ตรงกับการแบ่งสาย Unicode rn
, r
, v
, f
, n
, u +0085, U+2028 และ U+2029
เพื่อจับคู่ C/C ++ /*...*/
ความคิดเห็นหลายบรรทัด:
ug '/*(.*n)*?.**+/' myfile.cpp
เพื่อให้ตรงกับความคิดเห็น C/C ++ โดยใช้รูปแบบ c/comments
ที่กำหนดไว้ล่วงหน้าด้วย -fc/comments
ที่ จำกัด ไว้ที่ส่วนที่ตรงกันเท่านั้นด้วยตัวเลือก -o
:
ug -of c/comments myfile.cpp
เหมือนกับ sed -n '/begin/,/end/p'
: เพื่อให้ตรงกับเส้นทั้งหมดระหว่างบรรทัดที่มี begin
และบรรทัดแรกหลังจากนั้นมี end
โดยใช้การทำซ้ำขี้เกียจ:
ug -o '.*begin(.|n)*?end.*' myfile.txt
- กลับไปที่สารบัญ
-A NUM, --after-context=NUM
Output NUM lines of trailing context after matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns after
the match or shortens the match. See also options -B, -C and -y.
-B NUM, --before-context=NUM
Output NUM lines of leading context before matching lines. Places
a --group-separator between contiguous groups of matches. If -o is
specified, output the match with context to fit NUM columns before
the match or shortens the match. See also options -A, -C and -y.
-C NUM, --context=NUM
Output NUM lines of leading and trailing context surrounding each
matching line. Places a --group-separator between contiguous
groups of matches. If -o is specified, output the match with
context to fit NUM columns before and after the match or shortens
the match. See also options -A, -B and -y.
-y, --any-line
Any line is output (passthru). Non-matching lines are output as
context with a `-' separator. See also options -A, -B, and -C.
--width[=NUM]
Truncate the output to NUM visible characters per line. The width
of the terminal window is used if NUM is not specified. Note that
double wide characters in the output may result in wider lines.
-o, --only-matching
Output only the matching part of lines. If -A, -B or -C is
specified, fits the match and its context on a line within the
specified number of columns.
เพื่อแสดงบริบทสองบรรทัดก่อนและหลังบรรทัดการจับคู่:
ug -C2 'FIXME' myfile.cpp
เพื่อแสดงบริบทสามบรรทัดหลังจากเส้นที่ตรงกัน:
ug -A3 'FIXME.*' myfile.cpp:
ในการแสดงหนึ่งบรรทัดของบริบทก่อนแต่ละบรรทัดการจับคู่ด้วยคำจำกัดความฟังก์ชัน C (ชื่อ C ไม่ใช่ Unicode):
ug -B1 -f c/functions myfile.c
ในการแสดงบริบทหนึ่งบรรทัดก่อนแต่ละบรรทัดการจับคู่ด้วยนิยามฟังก์ชัน C ++ (ชื่อ C ++ อาจเป็น Unicode):
ug -B1 -f c++/functions myfile.cpp
เพื่อแสดงบรรทัดที่ไม่จับคู่เป็นบริบทสำหรับการจับคู่บรรทัดด้วย -y
:
ug -y -f c++/functions myfile.cpp
เพื่อแสดง hexdump ของเส้นที่ตรงกันด้วยหนึ่งบรรทัดของบริบท hexdump:
ug -C1 -UX 'xaaxbbxcc' a.out
บริบทภายในบรรทัดจะแสดงพร้อมตัวเลือก -o
พร้อมตัวเลือกบริบท:
ug -o -C20 'pattern' myfile.cpp
เหมือนกัน แต่มีเอาต์พุตสวย ๆ ด้วยหัวเรื่องหมายเลขบรรทัดและหมายเลขคอลัมน์ ( -k
) และแสดงบริบท:
ug --pretty -oC20 'pattern' myfile.cpp
- กลับไปที่สารบัญ
-f FILE, --file=FILE
Read newline-separated patterns from FILE. White space in patterns
is significant. Empty lines in FILE are ignored. If FILE does not
exist, the GREP_PATH environment variable is used as path to FILE.
If that fails, looks for FILE in /usr/local/share/ugrep/pattern.
When FILE is a `-', standard input is read. This option may be
repeated.
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
ประเภทไฟล์จะอยู่ในรายการด้วย ugrep -tlist
รายการจะขึ้นอยู่กับส่วนขยายชื่อไฟล์ที่กำหนดไว้และ "Magic Bytes" หากคุณมีประเภทไฟล์ที่ไม่อยู่ในรายการให้ใช้ตัวเลือก -O
และ/หรือ -M
คุณอาจต้องการกำหนดนามแฝงเช่น alias ugft='ugrep -Oft'
เป็นชวเลขเพื่อค้นหาไฟล์ด้วยชื่อไฟล์ filename .ft
ในการแสดงคำจำกัดความของฟังก์ชั่นซ้ำในไฟล์ C/C ++ ( .h
, .hpp
, .c
, .cpp
ฯลฯ ) ด้วยหมายเลขบรรทัดที่มี -tc++
, -o
, -n
และ -f c++/functions
:
ug -on -tc++ -f c++/functions
ในการแสดงคำจำกัดความของฟังก์ชั่นซ้ำในไฟล์ .c
และ .cpp
พร้อมหมายเลขบรรทัดด้วย -Oc,cpp
, -o
, -n
และ -f c++/functions
:
ug -on -Oc,cpp -f c++/functions
หากต้องการแสดงรายการไฟล์เชลล์ทั้งหมดด้วย -tShell
เพื่อจับคู่ส่วนขยายชื่อไฟล์และไฟล์กับเชลล์ shebangs ยกเว้นไฟล์ที่มีคำต่อท้าย .sh
:
ug -l -tShell -O^sh ''
เพื่อแสดงรายการไฟล์ที่ไม่ใช่เปลือกทั้งหมดด้วย -t^Shell
:
ug -l -t^Shell ''
หากต้องการแสดงรายการไฟล์เชลล์ทั้งหมดที่มีเชลล์ shebangs ที่ไม่มีส่วนขยายชื่อของเชลล์:
ug -l -tShell -t^shell ''
ในการค้นหาบรรทัดที่มี FIXME
ในความคิดเห็น C/C ++ ไม่รวม FIXME
ในสตริงหลายบรรทัด:
ug -n 'FIXME' -f c++/zap_strings myfile.cpp
ในการอ่านรูปแบบ TODO
และ FIXME
จากอินพุตมาตรฐานเพื่อจับคู่บรรทัดในอินพุตในขณะที่ไม่รวมการจับคู่ในสตริง C ++:
ug -on -f - -f c++/zap_strings myfile.cpp <<END
TODO
FIXME
END
ในการแสดงองค์ประกอบ XML และแท็กแอตทริบิวต์ในไฟล์ XML จำกัด อยู่ที่ส่วนที่ตรงกันด้วย -o
ไม่รวมแท็กที่อยู่ในความคิดเห็น (หลายบรรทัด):
ug -o -f xml/tags -f xml/zap_comments myfile.xml
- กลับไปที่สารบัญ
-z, --decompress
Search compressed files and archives. Archives (.cpio, .pax, .tar)
and compressed archives (e.g. .zip, .7z, .taz, .tgz, .tpz, .tbz,
.tbz2, .tb2, .tz2, .tlz, .txz, .tzst) are searched and matching
pathnames of files in archives are output in braces. When used
with option --zmax=NUM, searches the contents of compressed files
and archives stored within archives up to NUM levels. If -g, -O,
-M, or -t is specified, searches files stored in archives whose
filenames match globs, match filename extensions, match file
signature magic bytes, or match file types, respectively.
Supported compression formats: gzip (.gz), compress (.Z), zip, 7z,
bzip2 (requires suffix .bz, .bz2, .bzip2, .tbz, .tbz2, .tb2, .tz2),
lzma and xz (requires suffix .lzma, .tlz, .xz, .txz),
lz4 (requires suffix .lz4),
zstd (requires suffix .zst, .zstd, .tzst),
brotli (requires suffix .br),
bzip3 (requires suffix .bz3).
--zmax=NUM
When used with option -z (--decompress), searches the contents of
compressed files and archives stored within archives by up to NUM
expansion stages. The default --zmax=1 only permits searching
uncompressed files stored in cpio, pax, tar, zip and 7z archives;
compressed files and archives are detected as binary files and are
effectively ignored. Specify --zmax=2 to search compressed files
and archives stored in cpio, pax, tar, zip and 7z archives. NUM
may range from 1 to 99 for up to 99 decompression and de-archiving
steps. Increasing NUM values gradually degrades performance.
ไฟล์ที่ถูกบีบอัดด้วย gzip ( .gz
), บีบอัด ( .Z
), bzip2 ( .bz
, .bz2
, .bzip2
), lzma ( .lzma
), xz ( .xz
), lz4 ( .lz4
), zstd ( .zst
,. .zstd
), brotli ( .br
) และ bzip3 ( .bz3
) จะถูกค้นหาด้วยตัวเลือก -z
เมื่อมีการติดตั้งและรวบรวมไลบรารีที่เกี่ยวข้องด้วย UGREP ตัวเลือกนี้ไม่ต้องการให้ไฟล์ถูกบีบอัด ไฟล์ที่ไม่ได้บีบอัดจะถูกค้นหาแม้ว่าจะช้าลง
รูปแบบการบีบอัดอื่น ๆ สามารถค้นหาได้ด้วยตัวกรอง UGREP
คลังเก็บ (CPIO, jar, pax, tar, zip และ 7z) ถูกค้นหาด้วยตัวเลือก -z
ไฟล์ปกติในการเก็บถาวรที่ตรงกันคือเอาต์พุตด้วยชื่อพา ธ เก็บถาวรที่อยู่ในวงเล็บปีกกา {
และ }
รูปแบบ TAR ที่รองรับ ได้แก่ V7, USTAR, GNU, OLDGNU และ PAX รูปแบบ CPIO ที่รองรับคือ ODC, NEWC และ CRC ไม่ได้รับการสนับสนุนเป็นรูปแบบ CPIO แบบไบนารีเก่าที่ไม่สามารถพกพาได้ รูปแบบการเก็บถาวร CPIO, TAR และ PAX ได้รับการยอมรับโดยอัตโนมัติด้วยตัวเลือก -z
ตามเนื้อหาของพวกเขาโดยไม่ขึ้นกับคำต่อท้ายชื่อไฟล์
โดยค่าเริ่มต้นจดหมายเหตุที่ไม่ได้บีบอัดที่เก็บไว้ในคลังเก็บซิปจะถูกค้นหาเช่นกัน: ไฟล์ CPIO, PAX และ TAR ทั้งหมดที่เก็บไว้ในคลังเก็บ zip และ 7Z จะได้รับการยอมรับและค้นหาโดยอัตโนมัติ อย่างไรก็ตามโดยค่าเริ่มต้นไฟล์ที่ถูกบีบอัดที่เก็บไว้ในคลังเก็บจะไม่ได้รับการยอมรับเช่นไฟล์ zip ที่เก็บไว้ในไฟล์ TAR จะไม่ถูกค้นหา แต่เป็นไฟล์ที่บีบอัดและจดหมายเหตุทั้งหมดจะถูกค้นหาราวกับว่าเป็นไฟล์ไบนารีโดยไม่ต้องบีบอัดไฟล์เหล่านั้น
ระบุ --zmax=NUM
เพื่อค้นหาคลังเก็บที่มีไฟล์ที่บีบอัดและจดหมายเหตุสำหรับระดับสูงสุดถึง NUM
ลึก ค่าของ NUM
อาจอยู่ในช่วง 1 ถึง 99 สำหรับการบีบอัดสูงสุด 99 ขั้นตอนและขั้นตอนการยกเลิกการ จำกัด เพื่อขยายคลังเก็บซ้อนกันถึง 99 ค่าที่ใหญ่กว่า --zmax=NUM
ลดประสิทธิภาพ ไม่น่าเป็นไปได้ที่คุณจะต้องใช้ 99 เป็น --zmax=2
พอเพียงสำหรับกรณีการใช้งานที่ใช้งานได้จริงที่สุดเช่นการค้นหาไฟล์ซิปที่เก็บไว้ในไฟล์ TAR
เมื่อตัวเลือก -z
ถูกใช้กับตัวเลือก -g
, -O
, -M
หรือ -t
, คลังเก็บและไฟล์บีบอัดและไม่บีบอัดที่ตรงกับเกณฑ์การเลือกชื่อไฟล์ (GLOB, ส่วนขยาย, ไบต์เวทมนตร์หรือประเภทไฟล์) จะถูกค้นหาเท่านั้น ตัวอย่างเช่น ugrep -r -z -tc++
ค้นหาไฟล์ C ++ เช่น main.cpp
และ ZIP และ TAR ที่เก็บถาวรที่มีไฟล์ C ++ เช่น main.cpp
รวมอยู่ในการค้นหาคือไฟล์ C ++ ที่บีบอัดเช่น main.cpp.gz
และ main.cpp.xz
เมื่อมีอยู่ นอกจากนี้ยังมีการค้นหาไฟล์ CPIO, PAX, TAR, ZIP และ 7Z เมื่อมีการค้นหาไฟล์ C ++ ที่มีอยู่เช่น main.cpp
ใช้ตัวเลือก --stats
เพื่อดูรายการรูปแบบลูกโลกที่ใช้กับตัวกรองชื่อพา ธ ไฟล์ในการค้นหาแบบเรียกซ้ำและเมื่อค้นหาเนื้อหาที่เก็บถาวร
เมื่อตัวเลือก -z
ถูกใช้กับตัวเลือก -g
, -O
, -M
หรือ -t
เพื่อค้นหา cpio, jar, pax, tar, zip และ 7z, ไฟล์เก็บถาวรที่ตรงกับเกณฑ์การเลือกชื่อไฟล์จะถูกค้นหาเท่านั้น
รูปแบบ GZIP, การบีบอัดและซิปถูกตรวจพบโดยอัตโนมัติซึ่งมีประโยชน์เมื่ออ่านข้อมูลที่บีบอัด GZIP จากอินพุตมาตรฐานเช่นอินพุตที่เปลี่ยนเส้นทางจากท่อ รูปแบบการบีบอัดอื่น ๆ ต้องใช้คำต่อท้ายชื่อไฟล์: .bz
, .bz2
หรือ .bzip2
สำหรับ BZIP2, .lzma
สำหรับ LZMA, .xz
สำหรับ XZ, .lz4
สำหรับ LZ4, .zst
หรือ .zstd
สำหรับ ZSTD, .br
สำหรับ Brotli และ .bz3
สำหรับ BZIP3 นอกจากนี้การบีบอัด TAR Archive Shorthands .taz
, .tgz
และ .tpz
สำหรับ gzip, .tbz
, .tbz2
, .tb2
และ .tz2
สำหรับ bzip2, .tlz
สำหรับ lzma, .txz
สำหรับ XZ และ .tzst
สำหรับ ZSTD ได้รับการยอมรับ ในการค้นหารูปแบบเหล่านี้ด้วย UGREP จากอินพุตมาตรฐานให้ใช้ตัวเลือก --label='stdin.bz2'
สำหรับ bzip2, --label='stdin.lzma'
สำหรับ lzma, --label='stdin.xz'
สำหรับ xz, --label='stdin.lz4
สำหรับ lz4 และ --label='stdin.zst
สำหรับ zstd และอื่น ๆ ชื่อ stdin
นั้นเป็นไปโดยพลการและอาจถูกละเว้น:
รูปแบบ | ชื่อไฟล์ | TAR/PAX คลังเก็บสั้น ๆ | คำต่อท้ายที่ต้องการ? | Ugrep จาก stdin | ห้องสมุด |
---|---|---|---|---|---|
GZIP | .gz | .taz , .tgz , .tpz | เลขที่ | อัตโนมัติ | libz |
บีบอัด | .Z | .taZ , .tZ | เลขที่ | อัตโนมัติ | ในตัว |
ซิป | .zip , .zipx , .ZIP | เลขที่ | อัตโนมัติ | libz | |
7zip | .7z | ใช่ | --label=.7z | ในตัว | |
BZIP2 | .bz , .bz2 , .bzip2 | .tb2 , .tbz , .tbz2 , .tz2 | ใช่ | --label=.bz2 | libbz2 |
lzma | .lzma | .tlz | ใช่ | --label=.lzma | liblzma |
XZ | .xz | .txz | ใช่ | --label=.xz | liblzma |
LZ4 | .lz4 | ใช่ | --label=.lz4 | liblz4 | |
zstd | .zst , .zstd | .tzst | ใช่ | --label=.zst | libzstd |
Brotli | .br | ใช่ | --label=.br | libbrotlidec | |
BZIP3 | .bz3 | ใช่ | --label=.bz3 | libbzip3 |
รูปแบบ GZIP, BZIP2, XZ, LZ4 และ ZSTD รองรับไฟล์บีบอัดที่ต่อกัน ไฟล์ที่ถูกบีบอัดแบบต่อเนื่องจะถูกค้นหาเป็นไฟล์เดียว
วิธีการบีบอัด ZIP ที่รองรับจะถูกเก็บไว้ (0), deflate (8), BZIP2 (12), LZMA (14), XZ (95) และ ZSTD (93) วิธี BZIP2, LZMA, XZ และ ZSTD ต้องการ UGREP ที่จะรวบรวมด้วยไลบรารีการบีบอัดที่สอดคล้องกัน
การค้นหาคลังเก็บซิปที่เข้ารหัสไม่ได้รับการสนับสนุน (อาจจะอยู่ในรุ่นอนาคตขึ้นอยู่กับคำขอสำหรับการปรับปรุง)
การค้นหาเอกสารสำคัญ 7ZIP ใช้เวลามากขึ้นและมีเวลามากขึ้นเมื่อเทียบกับวิธีอื่น ๆ การใช้งาน 7ZIP LZMA SDK ไม่สนับสนุนการสตรีมซึ่งต้องใช้ไฟล์ 7Z ที่สามารถค้นหาได้ทางกายภาพ ซึ่งหมายความว่าไม่สามารถค้นหาไฟล์ 7Z เมื่อซ้อนกันภายในคลังเก็บ ดีที่สุดคือหลีกเลี่ยง 7ZIP การสนับสนุนสำหรับ 7ZIP สามารถปิดใช้งานได้ด้วย ./build.sh --disable-7zip
เพื่อสร้าง Ugrep
ตัวเลือก -z
ใช้เธรดสำหรับการขนานของงานเพื่อเพิ่มความเร็วในการค้นหาไฟล์ขนาดใหญ่โดยเรียกใช้ decompressor พร้อมกันด้วยการค้นหาสตรีมที่บีบอัด
หากต้องการแสดงรายการไฟล์ที่ไม่ว่างเปล่าทั้งหมดที่เก็บไว้ใน package.zip
Archive รวมถึงเนื้อหาของไฟล์ CPIO, PAX, TAR, ZIP และ 7Z ทั้งหมดที่เก็บไว้ในนั้น:
ug --zmax=2 -z -l '' package.zip
เหมือนกัน แต่แสดงรายการไฟล์ซอร์ส Python เท่านั้นรวมถึงสคริปต์ที่เรียกใช้ Python พร้อมตัวเลือก -tPython
( ugrep -tlist
สำหรับรายละเอียด):
ug --zmax=2 -z -l -tPython '' package.zip
ในการค้นหาแอปพลิเคชัน Python ที่แจกจ่ายเป็นไฟล์ TAR ที่มีการพึ่งพาของพวกเขารวมเป็นล้อ (ไฟล์ ZIP ที่มีรหัส Python) ค้นหาคำ my_class
ใน app.tgz
:
ug --zmax=2 -z -tPython -w my_class app.tgz
ในการค้นหาไฟล์ C ++ ซ้ำรวมถึงไฟล์ที่บีบอัดสำหรับคำ my_function
ในขณะที่ข้ามความคิดเห็น C และ C ++:
ug -z -r -tc++ -Fw my_function -f cpp/zap_comments
ในการค้นหา BZIP2, LZMA, XZ, LZ4 และ ZSTD ข้อมูลบีบอัดบนอินพุตมาตรฐานตัวเลือก --label
อาจถูกใช้เพื่อระบุส่วนขยายที่สอดคล้องกับรูปแบบการบีบอัดเพื่อบังคับการบีบอัดเมื่อส่วนขยาย BZIP2 ไม่สามารถใช้ได้กับ UGREP ตัวอย่างเช่น:
cat myfile.bz2 | ugrep -z --label='stdin.bz2' 'xyz'
ในการค้นหาไฟล์ main.cpp
ใน project.zip
สำหรับบรรทัด TODO
และ FIXME
:
ug -z -g main.cpp -w -e 'TODO' -e 'FIXME' project.zip
ในการค้นหา tarball project.tar.gz
สำหรับไฟล์ C ++ พร้อมบรรทัด TODO
และ FIXME
:
ug -z -tc++ -w -e 'TODO' -e 'FIXME' project.tar.gz
ในการค้นหาไฟล์ที่ตรงกับ glob *.txt
ใน project.zip
สำหรับ license
Word ในกรณีใด ๆ (โปรดทราบว่าต้องมีการอาร์กิวเมนต์ -g
Glob
ug -z -g '*.txt' -w -i 'license' project.zip
ในการแสดงและหน้าผ่านไฟล์ C ++ ทั้งหมดใน tarball project.tgz
:
ug --pager -z -tc++ '' project.tgz
ในการแสดงรายการไฟล์ที่ตรงกับ Gitignore-style glob /**/projects/project1.*
ใน projects.tgz
โดยเลือกไฟล์ที่มีอยู่ในคลังข้อความ December 12
:
ug -z -l -g '/**/projects/project1.*' -F 'December 12' projects.tgz
ในการดูข้อมูล meta -inf/manifest.mf ในไฟล์ jar ที่มี -Ojar
และ -OMF
เพื่อเลือกไฟล์ jar และไฟล์ MF ในนั้น ( -Ojar
จำเป็น อินพุตมาตรฐานแทน):
ug -z -h -OMF,jar '' my.jar
ในการแยกไฟล์ C ++ ที่มี FIXME
จาก project.tgz
เราใช้ -m1
กับ --format="'%z '"
เพื่อสร้างรายการชื่อพา ธ ของไฟล์ที่คั่นด้วยอวกาศที่อยู่ในคลังเก็บที่ตรงกับคำว่า FIXME
:
tar xzf project.tgz `ugrep -z -l -tc++ --format='%z ' -w FIXME project.tgz`
ในการค้นหาอย่างลึกซึ้งด้วย find
จากนั้นใช้ cpio
และ ugrep
เพื่อค้นหาไฟล์:
find . -depth -print | cpio -o | ugrep -z 'xyz'
- กลับไปที่สารบัญ
--ignore-files[=FILE]
Ignore files and directories matching the globs in each FILE that
is encountered in recursive searches. The default FILE is
`.gitignore'. Matching files and directories located in the
directory of the FILE and in subdirectories below are ignored.
Globbing syntax is the same as the --exclude-from=FILE gitignore
syntax, but files and directories are excluded instead of only
files. Directories are specifically excluded when the glob ends in
a `/'. Files and directories explicitly specified as command line
arguments are never ignored. This option may be repeated to
specify additional files.
-M MAGIC, --file-magic=MAGIC
Only files matching the signature pattern MAGIC are searched. The
signature "magic bytes" at the start of a file are compared to
the MAGIC regex pattern. When matching, the file will be searched.
When MAGIC is preceded by a `!' or a `^', skip files with matching
MAGIC signatures. This option may be repeated and may be combined
with options -O and -t to expand the search. Every file on the
search path is read, making searches potentially more expensive.
-O EXTENSIONS, --file-extension=EXTENSIONS
Search only files whose filename extensions match the specified
comma-separated list of EXTENSIONS, same as --include='*.ext' for
each `ext' in EXTENSIONS. When `ext' is preceded by a `!' or a
`^', skip files whose filename extensions matches `ext', same as
--exclude='*.ext'. This option may be repeated and may be combined
with options -g, -M and -t to expand the recursive search.
-t TYPES, --file-type=TYPES
Search only files associated with TYPES, a comma-separated list of
file types. Each file type corresponds to a set of filename
extensions passed to option -O and filenames passed to option -g.
For capitalized file types, the search is expanded to include files
with matching file signature magic bytes, as if passed to option
-M. When a type is preceded by a `!' or a `^', excludes files of
the specified type. This option may be repeated.
-g GLOBS, --glob=GLOBS
Search only files whose name matches the specified comma-separated
list of GLOBS, same as --include='glob' for each `glob' in GLOBS.
When a `glob' is preceded by a `!' or a `^', skip files whose name
matches `glob', same as --exclude='glob'. When `glob' contains a
`/', full pathnames are matched. Otherwise basenames are matched.
When `glob' ends with a `/', directories are matched, same as
--include-dir='glob' and --exclude-dir='glob'. A leading `/'
matches the working directory. This option may be repeated and may
be combined with options -M, -O and -t to expand searches. See
`ugrep --help globs' and `man ugrep' section GLOBBING for details.
--stats
Output statistics on the number of files and directories searched,
and the inclusion and exclusion constraints applied.
เพื่อแสดงรายการไฟล์ทั้งหมดที่เริ่มต้นด้วย #!
Shebangs:
ug -l -M'#!' ''
หากต้องการแสดงรายการไฟล์ทั้งหมดที่เริ่มต้นด้วย #
แต่ไม่ใช่ด้วย #!
Shebangs:
ug -l -M'#' -M'^#!' ''
หากต้องการแสดงรายการไฟล์ Python ทั้งหมด (ส่วนขยาย .py
หรือ shebang) ด้วย -tPython
:
ug -l -tPython ''
เพื่อแสดงรายการไฟล์ที่ไม่ใช่เปลือกทั้งหมดด้วย -t^Shell
:
ug -l -t^Shell ''
To recursively list Python files (extension .py
or a shebang) that have import statements, including hidden files with -.
-
ug -l. -tPython -f python/imports
- Back to table of contents
-Z[best][+-~][MAX], --fuzzy=[best][+-~][MAX]
Fuzzy mode: report approximate pattern matches within MAX errors.
The default is -Z1: one deletion, insertion or substitution is
allowed. If `+`, `-' and/or `~' is specified, then `+' allows
insertions, `-' allows deletions and `~' allows substitutions. For
example, -Z+~3 allows up to three insertions or substitutions, but
no deletions. If `best' is specified, then only the best matching
lines are output with the lowest cost per file. Option -Zbest
requires two passes over a file and cannot be used with standard
input or Boolean queries. Option --sort=best orders matching files
by best match. The first character of an approximate match always
matches a character at the beginning of the pattern. To fuzzy
match the first character, replace it with a `.' or `.?'. Option
-U applies fuzzy matching to ASCII and bytes instead of Unicode
text. No whitespace may be given between -Z and its argument.
The beginning of a pattern always matches the first character of an approximate match as a practical strategy to prevent many false "randomized" matches for short patterns. This also greatly improves search speed. Make the first character optional to optionally match it, eg p?attern
or use a dot as the start of the pattern to match any wide character (but this is slow).
Line feed ( n
) and NUL (