0Pricing
DevOps Bootcamp · บทเรียน

การรวม Regex เข้ากับ sed/awk

ผสานนิพจน์ปกติเข้ากับคำสั่ง 'sed' และ 'awk' เพื่อกรอง แทนที่ และดึงข้อมูลข้อความขั้นสูง

การรวม Regex เข้ากับ sed/awk เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

นิพจน์ทั่วไปด้วย sed และ awk

ยินดีต้อนรับสู่บทเรียนสุดท้ายเกี่ยวกับนิพจน์ทั่วไป เราได้เรียนรู้พลังของนิพจน์ทั่วไปในการจับคู่รูปแบบแล้ว

ตอนนี้มาผสานพลังดังกล่าวเข้ากับเครื่องมือ Linux สำคัญสองชนิด ได้แก่ sed (ตัวแก้ไขกระแสข้อมูล) และ awk (ภาษาสำหรับสแกนและประมวลผลรูปแบบ) การผสานนี้ช่วยให้กรองข้อความ แทนที่ข้อความ และดึงข้อมูลได้ในระดับขั้นสูงอย่างมาก

sed: กรองด้วยนิพจน์ทั่วไป

sed สามารถใช้นิพจน์ทั่วไปเพื่อกรองบรรทัดได้ ที่อยู่ /pattern/ ช่วยให้ sed ใช้คำสั่งกับเฉพาะบรรทัดที่ตรงกับนิพจน์ทั่วไปที่กำหนด

ตัวเลือก -n จะระงับผลลัพธ์เริ่มต้น ส่วน p จะสั่งพิมพ์บรรทัดที่ตรงกันอย่างชัดเจน

echo -e "apple
banana
orange" | sed -n '/an/p'

sed: แทนที่ด้วยนิพจน์ทั่วไป

คำสั่ง s/regex/replacement/ ใน sed คือจุดที่นิพจน์ทั่วไปแสดงพลังอย่างแท้จริงในการแปลงข้อความ คุณสามารถแทนที่รูปแบบที่นิพจน์ทั่วไปค้นพบด้วยข้อความใหม่ได้

แฟล็ก g จะแทนที่การปรากฏทั้งหมดในบรรทัด และ i จะทำให้การจับคู่ไม่แยกแยะตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

echo "Hello world, hello universe" | sed 's/hello/hi/gi'

sed: กลุ่มการจับคู่และการอ้างอิงย้อนกลับ

นิพจน์ทั่วไปช่วยให้คุณกำหนดกลุ่มการจับคู่โดยใช้วงเล็บ () จากนั้นคุณสามารถอ้างอิงข้อความที่กลุ่มเหล่านี้จับคู่ได้ในสตริงการแทนที่ โดยใช้การอ้างอิงย้อนกลับ เช่น \1, \2 และอื่น ๆ

ใช้ -E กับ sed สำหรับไวยากรณ์นิพจน์ทั่วไปแบบขยาย เช่น ใช้ () ได้โดยไม่ต้องมีอักขระหลีก

echo "Doe, John" | sed -E 's/([A-Za-z]+), ([A-Za-z]+)/\2 \1/'

awk: กรองระเบียนด้วยนิพจน์ทั่วไป

awk ใช้รูปแบบนิพจน์ทั่วไปเพื่อเลือกเรคคอร์ด (บรรทัด) ก่อนดำเนินการ หากระบุรูปแบบไว้ก่อนบล็อกการกระทำ {...} การกระทำนั้นจะทำงานเฉพาะกับบรรทัดที่ตรงกับรูปแบบ

ลักษณะนี้คล้ายกับ grep แต่รองรับการประมวลผลที่ซับซ้อนกว่า

echo -e "Line 1: apple
Line 2: banana
Line 3: orange" | awk '/banana/'

awk: ใช้นิพจน์ทั่วไปกับฟิลด์เฉพาะ

คุณสามารถใช้นิพจน์ทั่วไปกับฟิลด์เฉพาะใน awk โดยใช้ตัวดำเนินการ ~ (ตรงกับ) และ !~ (ไม่ตรงกับ) ความสามารถนี้ทรงพลังมากสำหรับข้อมูลที่มีโครงสร้าง

ตัวอย่างเช่น $1 ~ /pattern/ จะตรวจสอบว่าฟิลด์แรกตรงกับนิพจน์ทั่วไปหรือไม่

echo "Name: John, Age: 30
Name: Jane, Age: 25" | awk '$1 ~ /Name/ {print $2}'

awk: ดึงส่วนที่ตรงกัน (match, substr)

awk มีฟังก์ชันอย่าง match(string, regex) สำหรับค้นหาตำแหน่งและความยาวของส่วนที่ตรงกัน และ substr(string, start, length) สำหรับดึงส่วนนั้นออกมา

หลังจากใช้ match() แล้ว RSTART จะเก็บตำแหน่งเริ่มต้น และ RLENGTH จะเก็บความยาวของส่วนที่ตรงกัน

echo "ItemCode: ABC123 Price: 45.67" | awk '{match($0, /[0-9]+\.[0-9]+/); print substr($0, RSTART, RLENGTH)}'

awk: แทนที่ในตำแหน่งเดิม (sub, gsub)

awk ยังมีฟังก์ชันในตัวสำหรับการแทนที่ ได้แก่ sub(regex, replacement, target) สำหรับส่วนที่ตรงกันครั้งแรก และ gsub(regex, replacement, target) สำหรับส่วนที่ตรงกันทั้งหมด

หากไม่ระบุ target ระบบจะใช้ $0 (เรคคอร์ดทั้งหมด) คุณสามารถระบุฟิลด์ เช่น $1 ได้

echo "apple,banana,orange" | awk '{gsub(/a/, "X", $0); print}'

เลือกระหว่าง sed กับ awk

แม้ทั้ง sed และ awk จะใช้นิพจน์ทั่วไปเพื่อแทนที่และกรองข้อมูลได้ แต่แต่ละเครื่องมือก็ถนัดงานคนละด้าน

  • sed โดยทั่วไปเหมาะกว่าสำหรับการแปลงและแทนที่แบบง่าย ๆ ทีละบรรทัด เพราะเป็นตัวแก้ไขกระแสข้อมูล
  • awk มีประสิทธิภาพมากกว่าสำหรับประมวลผลข้อมูลที่มีโครงสร้าง (ฟิลด์) ดำเนินการคำนวณ และจัดการตรรกะที่ซับซ้อนกว่าหรือรูปแบบหลายบรรทัด อีกทั้งยังเป็นภาษาโปรแกรมในตัวเอง

บ่อยครั้งที่สามารถเชื่อมทั้งสองคำสั่งเข้าด้วยกันด้วยไปป์ | เพื่อทำงานที่ซับซ้อนมากได้

ภารกิจ: ดึงและแปลงข้อมูล

พิจารณาบรรทัดข้อความต่อไปนี้:

Order#12345: ProductX - Price $19.99

คำสั่งใดจะดึงราคา (เช่น '19.99') ได้อย่างถูกต้อง แล้วเปลี่ยนสัญลักษณ์สกุลเงินเป็น 'EUR'

ทบทวน: นิพจน์ทั่วไปด้วย sed และ awk

คุณเชี่ยวชาญการผสานนิพจน์ทั่วไปเข้ากับ sed และ awk แล้ว

  • sed โดดเด่นด้านการกรองและแทนที่ข้อความทีละบรรทัด โดยใช้นิพจน์ทั่วไปเพื่อจับคู่และแทนที่รูปแบบได้อย่างทรงพลัง
  • awk ใช้แนวทางเชิงโปรแกรมมากกว่า ช่วยให้นิพจน์ทั่วไปกรองเรคคอร์ด จับคู่ภายในฟิลด์เฉพาะ และดึงหรือแก้ไขข้อมูลด้วยฟังก์ชันอย่าง match(), substr(), sub() และ gsub()

ทักษะนี้สำคัญอย่างยิ่งสำหรับการประมวลผลข้อความและการเขียนสคริปต์ขั้นสูงใน Linux

คำถามที่พบบ่อย

บทเรียน “การรวม Regex เข้ากับ sed/awk” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การรวม Regex เข้ากับ sed/awk” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การรวม Regex เข้ากับ sed/awk”

ผสานนิพจน์ปกติเข้ากับคำสั่ง 'sed' และ 'awk' เพื่อกรอง แทนที่ และดึงข้อมูลข้อความขั้นสูง คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การรวม Regex เข้ากับ sed/awk” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม

ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. บทนำสู่นิพจน์ปกติ (Regex)
  2. Grep ขั้นสูงด้วย Regex
  3. การรวม Regex เข้ากับ sed/awk
  4. กลุ่มจับคู่ การอ้างอิงย้อนกลับ และการแทนที่
← กลับไปที่ DevOps Bootcamp