Metacharacters ของ Linux และความหมาย
อักขระเมตาคืออักขระใดๆ ที่มีความหมายพิเศษ เช่น กะรัต (^), เครื่องหมายดอลลาร์ ($) หรือเครื่องหมายดอกจัน (*) ลินุกซ์มีเมตาคาแรคเตอร์เหล่านี้อยู่พอสมควร และความหมายก็แตกต่างกันไปตาม คำสั่งลินุกซ์ หรือโปรแกรมที่คุณใช้
Full Stop เป็น Metacharacter (.)
หยุดเต็ม (.) ระบุตำแหน่งปัจจุบันเมื่อรันคำสั่งเช่น ซีดี, หา, หรือ sh. ในการใช้งานเช่น awk, grepและ sed เป็นไวด์การ์ดที่ระบุจำนวนอักขระใดๆ ที่ระบุ
ตัวอย่างเช่น คำสั่งต่อไปนี้จะค้นหาทั้งหมด ไฟล์ MP3 ในโฟลเดอร์ปัจจุบันและโฟลเดอร์ย่อย
หา. -type f -name '*.mp3'
หากคุณเรียกใช้คำสั่งนั้นในไดเร็กทอรีการทำงานปัจจุบัน (pwd) คุณจะเห็นผลลัพธ์ที่ส่งคืน สมมติว่าคุณเก็บไฟล์ MP3 ไว้ในโฟลเดอร์เพลงในโฟลเดอร์เริ่มต้นของคุณ
ตอนนี้ดูคำสั่งนี้:
ps -ef | grep f..fox
คำสั่ง ps แสดงรายการกระบวนการที่ทำงานอยู่ทั้งหมดบนคอมพิวเตอร์ของคุณ คำสั่ง grep รับบรรทัดอินพุตและค้นหารูปแบบ

คำสั่ง ps -ef ดึงรายการกระบวนการที่ทำงานอยู่ ท่อ (|) metacharacter ส่งรายการนั้นไปยังคำสั่ง grep ซึ่งค้นหาบรรทัดใด ๆ ในรายการที่มี ฉ..foxโดยที่จุดหมายถึงอักขระสองตัวใดตัวหนึ่ง
หาก Firefox ทำงานอยู่ คุณจะได้ผลลัพธ์ที่ตรงกัน ในทำนองเดียวกัน หากโปรแกรมที่ชื่อว่า fonefox หรือ freefox กำลังทำงาน โปรแกรมเหล่านี้จะถูกส่งคืนด้วย
หากคุณต้องการค้นหาอักขระเพียงตัวเดียว แทนที่จะใช้อักขระเมตาหยุดแบบเต็ม (.) ให้ใช้? อักขระเมตา ใช้? metacharacter หมายถึงอักขระเดี่ยวใดๆ ที่จุดเริ่มต้นหรือจุดสิ้นสุดของรูปแบบ
เครื่องหมายดอกจันเป็น Metacharacter (*)
เครื่องหมายดอกจัน (*) เป็น metacharacter ที่เป็นที่รู้จักในระดับสากล หมายถึง 0 หรือมากกว่าของอักขระใด ๆ เมื่อค้นหารูปแบบ ตัวอย่างเช่น:
ls *.flac

NS *.flac ส่วนหนึ่งของคำสั่งส่งคืนการจับคู่สำหรับชื่อไฟล์ที่ลงท้ายด้วย .flac ในทำนองเดียวกัน คุณสามารถใช้เครื่องหมายดอกจันกับคำสั่ง grep ในส่วนสุดท้ายดังนี้:
ps -ef | grep f*foox
สิ่งนี้แตกต่างกันเล็กน้อยเนื่องจากดอกจันหมายถึงศูนย์หรือมากกว่านั้น เช่นเดียวกับการค้นหา firefox, facefox และ fonefox มันยังพบ flutefox, ferretfox และ fefox

กะรัตเป็น Metacharacter (^)
กะรัต (^) ใช้เพื่อแสดงถึงจุดเริ่มต้นของบรรทัดหรือสตริง แล้วมันใช้ยังไง?
คำสั่ง ls แสดงรายการไฟล์ในโฟลเดอร์ดังนี้:
ls -a
หากคุณต้องการแสดงรายการไฟล์ในโฟลเดอร์ที่ขึ้นต้นด้วยสตริง เช่น gnome คุณสามารถใช้กะรัตเพื่อระบุสตริงนั้นได้ ตัวอย่างเช่น:
ls -a | grep ^gnome
รายการนี้จะแสดงรายการไฟล์ที่ขึ้นต้นด้วย gnome หากคุณต้องการไฟล์ที่มี gnome ที่ใดก็ได้ในชื่อไฟล์ ให้ใช้เครื่องหมายดอกจัน

ในตัวอย่างข้างต้น คำสั่ง ls จะส่งคืนรายชื่อไฟล์และส่งรายการนั้นไปยังคำสั่ง grep ซึ่งใช้สำหรับการจับคู่รูปแบบ Grep รู้ดีว่าสัญลักษณ์กะรัตหมายถึงการค้นหาทุกอย่างที่ขึ้นต้นด้วยอักขระที่ตามมา และในกรณีนี้ นั่นคือคำพังเพย
สัญลักษณ์ดอลลาร์เป็น Metacharacter ($)
สัญลักษณ์ดอลลาร์ ($) มีความหมายหลายอย่างในฐานะ metacharacter ใน Linux เมื่อใช้เพื่อจับคู่รูปแบบ หมายถึงสิ่งที่ตรงกันข้ามกับกะรัตและหมายถึงรูปแบบใดๆ ที่ลงท้ายด้วยสตริงเฉพาะ ตัวอย่างเช่น:
ls | grep png$
แสดงรายการไฟล์ทั้งหมดที่ลงท้ายด้วย png
สัญลักษณ์ดอลลาร์ยังใช้เพื่อเข้าถึงตัวแปรสภาพแวดล้อมภายใน bash shell ตัวอย่างเช่น:
#! /bin/bash
สุนัขส่งออก=มอลลี่
echo $dog

เส้น สุนัขส่งออก=มอลลี่ สร้างตัวแปรสภาพแวดล้อมที่เรียกว่า หมา และกำหนดมูลค่า มอลลี่. ในการเข้าถึงตัวแปรสภาพแวดล้อม ให้ใช้สัญลักษณ์ $ ด้วยสัญลักษณ์ $, the echo $dog คำสั่งแสดงมอลลี่ หากไม่มีมัน เสียงสะท้อนสุนัข คำสั่งแสดงคำว่า dog
หนี Metacharacters (\\)
บางครั้งคุณไม่ต้องการให้ metacharacter มีความหมายพิเศษ ตัวอย่างเช่น ถ้าไฟล์ชื่อ f.refox และอีกไฟล์หนึ่งชื่อ firefox.
ตอนนี้ดูที่คำสั่งต่อไปนี้:
ls | grep f.refox
คิดว่าจะได้อะไรกลับมา? ทั้ง f.refox และ firefox ถูกส่งกลับเนื่องจากทั้งคู่ตรงกับรูปแบบ

ในการส่งคืน f.refox เท่านั้น ให้หลีกเลี่ยงจุดหยุดทั้งหมดเพื่อหมายถึงการหยุดเต็มจริง ๆ ดังนี้:
ls | grep f\\.refox
วงเล็บเป็น Metacharacter ([])
คุณสามารถใช้วงเล็บ ([ ]) เมื่อค้นหารูปแบบ วงเล็บระบุตัวอักษรเฉพาะเพื่อให้ตรงกับที่ใดก็ได้ในรูปแบบ ตัวอย่างเช่น:
ls | เกรป [abc]
รายการนี้แสดงรายการไฟล์ทั้งหมดที่มีตัวอักษร a, b หรือ c

คุณสามารถใช้วงเล็บที่จุดเริ่มต้น สิ้นสุด หรือตรงกลางของรูปแบบการค้นหา
หากต้องการค้นหาช่วงตัวอักษร ให้ใช้อักขระยัติภังค์ (-) ตัวอย่างเช่น, ลส [a-h]* ส่งคืนไฟล์ที่ขึ้นต้นด้วยตัวอักษรใดๆ ตั้งแต่ a ถึง h
Metacharacter สำเนียงหลุมฝังศพ
ในตัวอย่างข้างต้น metacharacter ของไพพ์จะส่งผลลัพธ์ของคำสั่งหนึ่ง (เช่นคำสั่ง ls) ไปยังคำสั่งอื่น (เช่นคำสั่ง grep)
อีกวิธีหนึ่งในการทำเช่นนี้คือการใช้เครื่องหมายอัญประกาศด้านหลัง หรือที่เรียกว่า หลุมฝังศพที่เน้นเสียง (`) เพื่อแทรกผลลัพธ์ของคำสั่งหนึ่งไปยังคำสั่งอื่น เมื่อต้องการทำสิ่งนี้ ให้เก็บผลลัพธ์ของคำสั่งหนึ่งคำสั่งไว้ในตัวแปร ตัวอย่างเช่น:
command=`ls -lah`
echo $ command

ตัวอย่างนี้ประดิษฐ์ขึ้นมาเป็นพิเศษ และคุณจะไม่เคยทำแบบนั้นเลย แต่คุณสามารถเห็นวิธีการทำงาน อักขระ backtick รันคำสั่งและบันทึกผลลัพธ์ สิ่งนี้มีประโยชน์ในการเขียนสคริปต์ แต่มีความยืดหยุ่นน้อยกว่าการใช้ไพพ์สำหรับคำสั่งง่ายๆ
Metacharacters ทั่วไปและความหมายของพวกเขา
อักขระ | ความหมาย |
. | ตัวอักษรใดก็ได้ |
* | อักขระศูนย์หรือมากกว่า |
^ | จับคู่บรรทัดหรือสตริงที่ขึ้นต้นด้วยรูปแบบ (เช่น ^gnome) |
$ | จับคู่บรรทัดหรือสตริงที่ลงท้ายด้วยรูปแบบ (เช่น gnome$) |
\ | หนีอักขระตัวถัดไปเพื่อลบความหมายพิเศษ |
[] | จับคู่หนึ่งในรายการหรือช่วง (เช่น ["abc", "def"] หรือ [1..9]) |
+ | จับคู่คำนำหน้าอย่างน้อย 1 รายการ (เช่น grep a+) |
? | ตรงกับศูนย์หรือหนึ่งที่อยู่ข้างหน้า |