การรวม 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- บทนำสู่นิพจน์ปกติ (Regex)
- Grep ขั้นสูงด้วย Regex
- การรวม Regex เข้ากับ sed/awk
- กลุ่มจับคู่ การอ้างอิงย้อนกลับ และการแทนที่