เปลือก Linux และ Unix เหมือนbashอนุญาตให้ใช้ globs เพื่อชื่อไฟล์โดยประมาณและทำให้การค้นหาไฟล์ง่ายขึ้น ฉันทราบสัญลักษณ์ตัวแทน (*) มี globs อื่นใดอีกบ้างbashที่ฉันสามารถใช้กับมันได้grep?
@KamilMaciorowski ผมทราบความแตกต่างระหว่าง globs และ regex แต่ผมก็รู้สึกว่า GNU grep สนับสนุน globs โดยค่าเริ่มต้น (แม้จะมี
—
Hashim
grep -F) เช่นเดียวกับคำสั่งอื่น ๆ bashมากที่สุดใน
"เหมือนกับคำสั่งอื่น ๆ ส่วนใหญ่ใน
—
Kamil Maciorowski
bash" - grepไม่ใช่คำสั่ง "ในbash" แต่สามารถเรียกใช้งานแยกต่างหากที่คุณสามารถเรียกใช้โดยไม่มีเชลล์หากคุณรู้วิธี คุณควรแยกความแตกต่างระหว่าง globs ที่ขยายอย่างละเอียดโดยbashก่อนหน้าgrep(หรือคำสั่งใด ๆ ที่เรียกใช้ในเชลล์) แม้จะเรียกใช้จาก globs, นิพจน์ทั่วไปหรือสิ่งอื่นใดที่สนับสนุนโดยคำสั่งนั้น
เชลล์จะขยาย globs ก่อนส่งผ่านไปยัง
—
Gordon Davisson
grepรายการอาร์กิวเมนต์ ดังนั้นgrep -f *.txtจะขยายไปสู่สิ่งที่ชอบgrep -f file1.txt file2.txt file3.txtและgrepจะตีความfile1.txtว่าเป็นไฟล์เพื่ออ่านรูปแบบการค้นหาจากและfile2.txtและfile3.txtเป็นไฟล์เพื่อค้นหารูปแบบเหล่านั้น grepไม่มีความคิดใด ๆ ที่มีรูปแบบ glob เกี่ยวข้อง แต่เพียงรู้ว่ามันมีสตริง "-f", "file1.txt", "file2.txt" และ "file3.txt" เป็นอาร์กิวเมนต์
เรียก
—
Kamil Maciorowski
set -xใช้ (ใช้set +xเพื่อเปลี่ยนกลับในภายหลัง) จากนั้นเรียกใช้grep -f *.txt 1>/dev/null 2>/dev/null(การเปลี่ยนเส้นทางเป็นเพียงการทำให้คำสั่งเงียบเอง) สิ่งที่คุณเห็นหลังจากนั้น+คือคำสั่งจริง ลองในไดเรกทอรีที่มีไฟล์ตรงกัน 0, 1 หรือมากกว่า คุณจะเห็นสิ่งที่grepได้รับข้อโต้แย้งจริง ๆ
grepใช้นิพจน์ทั่วไป เหล่านี้แตกต่างจาก globsgrepการใช้งานบางอย่างใช้ globs กับตัวเลือกเช่น--exclude=GLOBแต่ฉันคิดว่าตัวเลือกเหล่านี้ไม่จำเป็นต้องใช้โดย POSIX ดังนั้นคุณไม่ควรคิดgrepว่ารู้อะไรเกี่ยวกับ globs