ฉันค้นคว้ามามาก แต่ฉันยังไม่ชัดเจน อะไรคำว่าเขตแดนเฉลี่ย? มันทำอะไร?
ตัวอย่างเช่นมีคนอธิบายคำสั่งนี้ให้ฉันหน่อยได้ไหม
egrep '\b[A-Z]+\b' filename.sh
ฉันค้นคว้ามามาก แต่ฉันยังไม่ชัดเจน อะไรคำว่าเขตแดนเฉลี่ย? มันทำอะไร?
ตัวอย่างเช่นมีคนอธิบายคำสั่งนี้ให้ฉันหน่อยได้ไหม
egrep '\b[A-Z]+\b' filename.sh
คำตอบ:
ตามที่อธิบายไว้ที่นี่ยกตัวอย่างเช่นมันตรงระหว่างคำ:
มีสามตำแหน่งที่แตกต่างกันซึ่งมีคุณสมบัติเป็นขอบเขตของคำ:
- ก่อนอักขระตัวแรกในสตริงถ้าอักขระตัวแรกเป็นตัวอักษรคำ
- หลังจากอักขระตัวสุดท้ายในสตริงถ้าอักขระตัวสุดท้ายเป็นตัวอักษรคำ
- ระหว่างอักขระสองตัวในสตริงโดยที่หนึ่งคืออักขระคำและอีกตัวหนึ่งไม่ใช่อักขระคำ
นี่คือตัวอย่างของแต่ละกรณี:
สำหรับสตริงfoobarกรณีแรกจะจับคู่
foobar
^-----here
สำหรับสตริงfoobarตัวพิมพ์ที่สองจะจับคู่
foobar
^--here
สำหรับสตริงfoo barกรณีที่สามจะจับคู่
foo bar
^--here, because space is not a word character
สิ่งที่มีคุณสมบัติเป็นตัวอักษรคำขึ้นอยู่กับการใช้งานการแสดงออกปกติเฉพาะ อย่างไรก็ตามในทุกกรณีตัวอักษร ( [a-z]และ[A-Z]), ตัวเลข ( [0-9]) และ_ถือเป็นตัวอักษรคำ
ดังนั้นตัวอย่าง regex ที่คุณโพสต์ ( \b[A-Z]+\b) หมายถึงค้นหาสตริงที่ยาวที่สุดที่อยู่ระหว่างสองคำและที่ประกอบด้วยตัวอักษรตัวพิมพ์ใหญ่เท่านั้น มันอาจจะง่ายต่อการอธิบายโดยตัวอย่าง:
echo "FOOBAR" | egrep '\b[A-Z]+\b' # Works
echo "FOO BAR" | egrep '\b[A-Z]+\b' # Works
echo "aFOOBARb" | egrep '\b[A-Z]+\b' # Does not work, we want capitals only
echo "12345" | egrep '\b[A-Za]+\b' # Does not work, no letters
echo "1FOOBAR2" | egrep '\b[A-Z]+\b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep '\b[A-Z]+\b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep '\b[A-Z]+\b' # Works, # and $ are not word chars
egrep(หรือ/usr/xpg4/bin/egrep) ไม่ปฏิบัติ\bเช่นนี้ ตัวอย่างเช่นecho "FOOBAR" | egrep '\b[A-Z]+\b'จะไม่ตรงกัน
egrep '\b[A-Z]+\b' filename.sh
ให้ทำลายมันได้:
[A-Z]แสดงให้เห็นถึงตัวละครตัวหนึ่งใด ๆ
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]ในชั้นเรียนของตัวละคร[A-Z]+หมายถึงการเกิดขึ้นหนึ่งหรือมากกว่าของตัวอักษรตัวพิมพ์ใหญ่ ตรงกับตัวอย่างจะเป็น: A, HELLO, IS, I, ELEPHANTฯลฯ'\bINDIA\b': เป็นเหมือนคำทั้งค้นหาคำINDIAในกรณีบน มันจะไม่INDIANAตรงกับ ดังนั้นการใช้หลักการเดียวกัน - '\b[A-Z]+\b'จะมองหาคำทั้งหมดที่มีตัวอักษรหนึ่งตัวหรือมากกว่าในกรณีบนegrep '\b[A-Z]+\b' filename.shจะค้นหาคำที่มีหนึ่งหรือมากกว่าตัวอักษรทั้งหมดในกรณีบนในแฟ้ม filename.sh-\b - เหมือนกับการค้นหาคำทั้งหมด
[azA-Z0-9_]เป็นประกอบด้วย ตรวจสอบคู่มือสำหรับegrep(1)บางทีการแก้ไขสำหรับนิพจน์ปกติที่ใช้งานอยู่