0Pricing
Linux Command Line & Bash Scripting Mastery · บทเรียน

การจัดการข้อความขั้นสูง (sed, awk)

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

การจัดการข้อความขั้นสูง (sed, awk) เป็นบทเรียน Linux Command Line & Bash Scripting Mastery ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Linux Command Line & Bash Scripting Mastery และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน

การแก้ไขกระแสข้อมูลด้วย sed

sed ย่อมาจาก "ตัวแก้ไขกระแสข้อมูล" เป็นเครื่องมือบรรทัดคำสั่งที่ทรงพลังสำหรับการแยกวิเคราะห์และแปลงข้อความ โดยประมวลผลกระแสข้อความทีละบรรทัด ลองนึกภาพว่าเป็นตัวแก้ไขข้อความที่ไม่โต้ตอบ

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

การแทนที่ข้อความอย่างง่าย

การใช้งาน sed ที่พบบ่อยที่สุดคือการแทนที่ข้อความ เราใช้คำสั่ง s ตามด้วยตัวคั่น (มักเป็น /) รูปแบบที่ต้องการค้นหา ตัวคั่นอีกตัว ข้อความที่จะใช้แทนที่ และตัวคั่นปิดท้าย

ไวยากรณ์: sed 's/pattern/replacement/' filename

ลองแทนที่ "apple" ด้วย "orange" ในไฟล์ตัวอย่าง:

#!/bin/bash
# Create a sample file
echo "I like red apple." > fruits.txt
echo "My favorite fruit is apple." >> fruits.txt
echo "Another apple here." >> fruits.txt

echo "Original content:"
cat fruits.txt
echo ""

echo "---"
echo "Running sed command:"
sed 's/apple/orange/' fruits.txt
# Clean up
rm fruits.txt

ทั่วโลกและไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่

โดยค่าเริ่มต้น sed จะแทนที่รูปแบบที่พบ ครั้งแรก ในแต่ละบรรทัดเท่านั้น หากต้องการแทนที่รูปแบบที่พบ ทั้งหมด ในบรรทัด ให้ใช้แฟล็ก g (ทั่วโลก)

หากต้องการค้นหาโดยไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ ให้ใช้แฟล็ก i คุณสามารถใช้แฟล็กร่วมกันได้ เช่น gi

ตัวอย่าง: แทนที่ "apple" ทั้งหมดโดยไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ด้วย "banana"

#!/bin/bash
# Create a sample file
echo "Apple is good." > fruits.txt
echo "I eat an apple and another Apple." >> fruits.txt
echo "Apples are tasty." >> fruits.txt

echo "Original content:"
cat fruits.txt
echo ""

echo "---"
echo "Running sed command (s/apple/banana/gi):"
sed 's/apple/banana/gi' fruits.txt
# Clean up
rm fruits.txt

การลบบรรทัดด้วย sed

คุณยังสามารถใช้ sed เพื่อลบบรรทัดทั้งหมดที่ตรงกับรูปแบบที่กำหนดได้ โดยใช้คำสั่ง d

ไวยากรณ์: sed '/pattern/d' filename

วิธีนี้มีประโยชน์สำหรับการลบบรรทัดที่ไม่ต้องการ เช่น รายการบันทึกที่มีคำว่า "DEBUG" หรือบรรทัดว่าง

ลองลบบรรทัดที่มีคำว่า "error":

#!/bin/bash
# Create a sample file
echo "INFO: User logged in." > log.txt
echo "WARNING: Disk space low." >> log.txt
echo "ERROR: File not found." >> log.txt
echo "INFO: Operation complete." >> log.txt
echo "ERROR: Permission denied." >> log.txt

echo "Original content:"
cat log.txt
echo ""

echo "---"
echo "Running sed command (/error/d):"
sed '/error/d' log.txt
# Clean up
rm log.txt

awk: ภาษาสำหรับสแกนรูปแบบ

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

awk ประมวลผลไฟล์ข้อความทีละบรรทัดเช่นเดียวกับ sed อย่างไรก็ตาม awk จะถือว่าแต่ละบรรทัดเป็น "ระเบียน" และแบ่งระเบียนออกเป็น "เขตข้อมูล" (คอลัมน์) โดยอ้างอิงจากตัวคั่น

โดยค่าเริ่มต้น awk ใช้ช่องว่าง (ช่องว่างและแท็บ) เป็นตัวคั่นเขตข้อมูล

การเข้าถึงเขตข้อมูล

ใน awk จะอ้างอิงเขตข้อมูลด้วย $1, $2, $3 และต่อไปเรื่อย ๆ ส่วน $0 หมายถึงทั้งบรรทัด

คุณสามารถพิมพ์เขตข้อมูลที่ต้องการโดยใช้คำสั่ง print ภายในวงเล็บปีกกา {} ไวยากรณ์คือ: awk '{ print $FIELD_NUMBER }' filename

ลองพิมพ์เขตข้อมูลที่หนึ่งและที่สามจากไฟล์ข้อมูลอย่างง่าย:

#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt

echo "Original content:"
cat data.txt
echo ""

echo "---"
echo "Running awk command (print $1, $3):"
awk '{print $1, $3}' data.txt
# Clean up
rm data.txt

การกรองบรรทัดด้วย awk

เช่นเดียวกับ sed awk สามารถกรองบรรทัดตามรูปแบบได้เช่นกัน คุณระบุรูปแบบไว้ก่อนบล็อกการทำงาน การทำงานจะเกิดขึ้นเฉพาะกับบรรทัดที่ตรงกับรูปแบบเท่านั้น

ไวยากรณ์: awk '/pattern/ { action }' filename

ลองค้นหาและพิมพ์เฉพาะชื่อของผู้คนจาก "London":

#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "David 28 London" >> data.txt

echo "Original content:"
cat data.txt
echo ""

echo "---"
echo "Running awk command (/London/ {print $1}):"
awk '/London/ {print $1}' data.txt
# Clean up
rm data.txt

การเริ่มต้นและสิ้นสุดด้วย awk

awk ช่วยให้คุณระบุการทำงานที่จะดำเนินการก่อนประมวลผลบรรทัดใด ๆ (BEGIN บล็อก) และหลังประมวลผลบรรทัดทั้งหมดแล้ว (END บล็อก)

บล็อก BEGIN เหมาะสำหรับการพิมพ์ส่วนหัวหรือเริ่มต้นค่าตัวแปร ส่วนบล็อก END เหมาะสำหรับการพิมพ์สรุปผล ยอดรวม หรือส่วนท้าย

ลองเพิ่มส่วนหัวและส่วนท้ายให้ผลลัพธ์ของเรา:

#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt

echo "Original content:"
cat data.txt
echo ""

echo "---"
echo "Running awk command (BEGIN/END):"
awk 'BEGIN { print "--- User Data ---" } { print $1, $2 } END { print "--- End Report ---" }' data.txt
# Clean up
rm data.txt

ตรรกะแบบมีเงื่อนไขใน awk

คุณสามารถใช้คำสั่ง if ภายในบล็อกการทำงานของ awk เพื่อใช้ตรรกะตามค่าของเขตข้อมูลหรือเงื่อนไขอื่น ๆ วิธีนี้ทำให้ awk มีประสิทธิภาพมากสำหรับการกรองและแปลงข้อมูลที่ซับซ้อน

ไวยากรณ์: awk '{ if (condition) { action } }' filename

ลองพิมพ์เฉพาะผู้ใช้ที่มีอายุมากกว่า 25 ปี:

#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Diana 27 Berlin" >> data.txt

echo "Original content:"
cat data.txt
echo ""

echo "---"
echo "Running awk command (if $2 > 25):"
awk '{ if ($2 > 25) { print $1, $2 } }' data.txt
# Clean up
rm data.txt

ตรวจสอบความเข้าใจอย่างรวดเร็ว: sed และ awk

พิจารณาเนื้อหาต่อไปนี้ในไฟล์ชื่อ names.txt:

John Doe,30,New York
Jane Smith,25,London
Peter Jones,40,Paris

คำสั่งใดต่อไปนี้จะแสดงเฉพาะชื่อ (เขตข้อมูลแรก) ของผู้ที่มีอายุมากกว่า 30 ปี

ทบทวน: ความสามารถของ sed และ awk

ตอนนี้คุณได้สำรวจความสามารถของ sed สำหรับการแก้ไขกระแสข้อมูล และ awk สำหรับการประมวลผลข้อความขั้นสูงแล้ว!

  • sed เหมาะอย่างยิ่งสำหรับการแทนที่ การลบ และการแปลงข้อมูลแบบง่ายทีละบรรทัด
  • awk โดดเด่นในการแยกวิเคราะห์ข้อความที่มีโครงสร้าง การทำงานกับเขตข้อมูล และการใช้ตรรกะแบบมีเงื่อนไขเพื่อดึงข้อมูลและจัดทำรายงาน

เครื่องมือเหล่านี้ขาดไม่ได้สำหรับการเขียนสคริปต์ การวิเคราะห์บันทึก และการจัดการข้อมูลในสภาพแวดล้อม Linux

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

บทเรียน “การจัดการข้อความขั้นสูง (sed, awk)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดการข้อความขั้นสูง (sed, awk)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Linux Command Line & Bash Scripting Mastery ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Linux Command Line & Bash Scripting Mastery มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดการข้อความขั้นสูง (sed, awk)”

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

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Linux Command Line & Bash Scripting Mastery หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Linux Command Line & Bash Scripting Mastery บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การจัดการข้อความขั้นสูง (sed, awk)” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Linux Command Line & Bash Scripting Mastery นี้ได้ไหม

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

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

  1. การจัดการข้อความขั้นสูง (sed, awk)
  2. การจัดเก็บและบีบอัดข้อมูล (tar, gzip, unzip)
  3. การใช้งานดิสก์และข้อมูลระบบ (df, du, uname)
  4. การเรียงลำดับและลบข้อมูลซ้ำ (sort, uniq, cut)
← กลับไปที่ Linux Command Line & Bash Scripting Mastery