AWK - นิพจน์ทั่วไป

AWK มีประสิทธิภาพและประสิทธิผลในการจัดการนิพจน์ทั่วไป งานที่ซับซ้อนจำนวนมากสามารถแก้ไขได้ด้วยนิพจน์ทั่วไปที่เรียบง่าย ผู้เชี่ยวชาญด้านบรรทัดคำสั่งรู้ถึงพลังของนิพจน์ทั่วไป

บทนี้ครอบคลุมนิพจน์ทั่วไปมาตรฐานพร้อมตัวอย่างที่เหมาะสม

จุด

ตรงกับอักขระเดี่ยวใด ๆ ยกเว้นอักขระท้ายบรรทัด ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรงกันfin, fun, fan เป็นต้น

ตัวอย่าง

[jerry]$ echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'

ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

fun
fin
fan

จุดเริ่มต้นของบรรทัด

ตรงกับจุดเริ่มต้นของบรรทัด ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์บรรทัดทั้งหมดที่ขึ้นต้นด้วยรูปแบบThe.

ตัวอย่าง

[jerry]$ echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'

ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

There
Their

ท้ายบรรทัด

ตรงกับจุดสิ้นสุดของบรรทัด ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์บรรทัดที่ลงท้ายด้วยตัวอักษรn.

ตัวอย่าง

[jerry]$ echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'

เอาต์พุต

ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

fun
fin
fan

จับคู่ชุดอักขระ

ใช้เพื่อจับคู่อักขระเพียงตัวเดียวจากหลายตัว ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรงกับรูปแบบCall และ Tall แต่ไม่ Ball.

ตัวอย่าง

[jerry]$ echo -e "Call\nTall\nBall" | awk '/[CT]all/'

เอาต์พุต

ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

Call
Tall

ชุดพิเศษ

ในชุดพิเศษกะรัตจะลบล้างชุดอักขระในวงเล็บเหลี่ยม ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์เท่านั้นBall.

ตัวอย่าง

[jerry]$ echo -e "Call\nTall\nBall" | awk '/[^CT]all/'

ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

Ball

การเปลี่ยนแปลง

แถบแนวตั้งช่วยให้นิพจน์ทั่วไปสามารถ ORed ในเชิงตรรกะได้ ตัวอย่างเช่นตัวอย่างต่อไปนี้จะพิมพ์ออกมาBall และ Call.

ตัวอย่าง

[jerry]$ echo -e "Call\nTall\nBall\nSmall\nShall" | awk '/Call|Ball/'

ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

Call
Ball

การเกิดขึ้นเป็นศูนย์หรือหนึ่งครั้ง

ตรงกับศูนย์หรือหนึ่งครั้งของอักขระนำหน้า ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรงกันColour เช่นเดียวกับ Color. เราได้ทำu เป็นอักขระเสริมโดยใช้ ?.

ตัวอย่าง

[jerry]$ echo -e "Colour\nColor" | awk '/Colou?r/'

ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

Colour
Color

การเกิดขึ้นเป็นศูนย์หรือมากกว่า

ตรงกับการเกิดขึ้นของอักขระก่อนหน้าเป็นศูนย์หรือมากกว่า ตัวอย่างเช่นตัวอย่างต่อไปนี้ตรงกันca, cat, catt, และอื่น ๆ

ตัวอย่าง

[jerry]$ echo -e "ca\ncat\ncatt" | awk '/cat*/'

ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

ca
cat
catt

การเกิดขึ้นอย่างน้อยหนึ่งครั้ง

ตรงกับหนึ่งหรือมากกว่าที่เกิดขึ้นก่อนหน้านี้ ตัวอย่างเช่นตัวอย่างด้านล่างตรงกับเหตุการณ์อย่างน้อยหนึ่งครั้งของ2.

ตัวอย่าง

[jerry]$ echo -e "111\n22\n123\n234\n456\n222"  | awk '/2+/'

ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

22
123
234
222

การจัดกลุ่ม

Parentheses ()ใช้สำหรับการจัดกลุ่มและอักขระ | ใช้สำหรับทางเลือกอื่น ตัวอย่างเช่นนิพจน์ทั่วไปต่อไปนี้ตรงกับบรรทัดที่มีอย่างใดอย่างหนึ่งApple Juice or Apple Cake.

ตัวอย่าง

[jerry]$ echo -e "Apple Juice\nApple Pie\nApple Tart\nApple Cake" | awk 
   '/Apple (Juice|Cake)/'

ในการเรียกใช้รหัสนี้คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

Apple Juice
Apple Cake