ในตัวอย่างต่อไปนี้sed
จับคู่บรรทัดที่ขึ้นต้นด้วยa
หรือหรือc
และพิมพ์อักขระตัวแรกของบรรทัดนั้น ( a
หรือc
):
$ echo "ag
bh
ci
dj
ek
fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'.
output:
a
bh
c
dj
ek
fl
อย่างไรก็ตามบรรทัดที่ไม่ตรงกับรูปแบบจะถูกพิมพ์ออกมาเช่นกัน ฉันจะบอกsed
ให้ละเว้นบรรทัดที่ไม่ตรงกับรูปแบบได้อย่างไร ฉันสามารถรับเอฟเฟกต์ที่ต้องการได้โดยรวมเข้ากับgrep
(ดังต่อไปนี้) แต่ฉันอยากจะรู้ว่าsed
สามารถบรรลุ "ด้วยตัวเอง" ได้หรือไม่
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
มันไม่สำคัญสำหรับสิ่งที่คุณอยากรู้ แต่รูปแบบของคุณควรเริ่มต้นด้วย ^ ดังนั้นมันจึงยึดกับจุดเริ่มต้นของบรรทัด ตามรหัสแล้วมันจะจับคู่ a หรือ c ที่ใดก็ได้ในบรรทัดตราบใดที่ไม่ใช่อักขระตัวสุดท้าย
—
Joe