Unix / Linux - นิพจน์ทั่วไปพร้อม SED

ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับนิพจน์ทั่วไปกับ SED ใน Unix

นิพจน์ทั่วไปคือสตริงที่สามารถใช้เพื่ออธิบายลำดับอักขระต่างๆ นิพจน์ทั่วไปถูกใช้โดยคำสั่ง Unix ต่างๆรวมถึงed, sed, awk, grepและในขอบเขตที่ จำกัด มากขึ้น vi.

ที่นี่ SED หมายถึง stream editor. ตัวแก้ไขที่เน้นสตรีมนี้สร้างขึ้นเพื่อเรียกใช้สคริปต์โดยเฉพาะ ดังนั้นอินพุตทั้งหมดที่คุณป้อนเข้าไปจะผ่านและไปที่ STDOUT และจะไม่เปลี่ยนไฟล์อินพุต

เรียกเสน่ห์

ก่อนที่เราจะเริ่มต้นโปรดตรวจสอบให้แน่ใจว่าเรามีสำเนาของไฟล์ /etc/passwd ไฟล์ข้อความที่จะใช้งานได้ sed.

ดังที่ได้กล่าวไว้ก่อนหน้านี้ sed สามารถเรียกใช้โดยการส่งข้อมูลผ่านไปป์ดังต่อไปนี้ -

$ cat /etc/passwd | sed
Usage: sed [OPTION]... {script-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression = script
...............................

cat คำสั่งทิ้งเนื้อหาของ /etc/passwd ถึง sedผ่านท่อเข้าไปในช่องว่างรูปแบบของ sed พื้นที่รูปแบบคือบัฟเฟอร์งานภายในที่ sed ใช้สำหรับการดำเนินการ

ไวยากรณ์ทั่วไป sed

ต่อไปนี้เป็นไวยากรณ์ทั่วไปสำหรับ sed -

/pattern/action

ที่นี่ pattern เป็นนิพจน์ทั่วไปและ actionเป็นหนึ่งในคำสั่งที่กำหนดในตารางต่อไปนี้ ถ้าpattern ถูกละไว้ action ดำเนินการสำหรับทุกบรรทัดตามที่เราได้เห็นข้างต้น

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

ซีเนียร์ ช่วงและคำอธิบาย
1

p

พิมพ์บรรทัด

2

d

ลบบรรทัด

3

s/pattern1/pattern2/

แทนที่การเกิดขึ้นครั้งแรกของ pattern1 ด้วย pattern2

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

ตอนนี้เราจะเข้าใจวิธีการลบบรรทัดทั้งหมดด้วย sed วิงวอนอีกครั้ง; แต่ตอนนี้ sed ควรใช้ไฟล์editing command delete lineแสดงด้วยตัวอักษรเดี่ยว d -

$ cat /etc/passwd | sed 'd'
$

แทนที่จะเรียกใช้ sed โดยการส่งไฟล์ผ่านไพพ์ sed สามารถสั่งให้อ่านข้อมูลจากไฟล์ดังตัวอย่างต่อไปนี้

คำสั่งต่อไปนี้จะเหมือนกับในตัวอย่างก่อนหน้านี้ทุกประการโดยไม่มีคำสั่ง cat -

$ sed -e 'd' /etc/passwd
$

ที่อยู่ sed

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

คำสั่งต่อไปนี้จะเพิ่มแอดเดรสพื้นฐานให้กับคำสั่ง sed ที่คุณใช้อยู่ -

$ cat /etc/passwd | sed '1d' |more
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
$

สังเกตว่าหมายเลข 1 จะถูกเพิ่มก่อน delete editคำสั่ง คำสั่งนี้สั่งให้ sed ดำเนินการคำสั่งแก้ไขในบรรทัดแรกของไฟล์ ในตัวอย่างนี้ sed จะลบบรรทัดแรกของ/etc/password และพิมพ์ไฟล์ที่เหลือ

ช่วงที่อยู่ sed

ตอนนี้เราจะเข้าใจวิธีการทำงานกับ the sed address ranges. แล้วถ้าคุณต้องการลบมากกว่าหนึ่งบรรทัดออกจากไฟล์ล่ะ? คุณสามารถระบุช่วงที่อยู่ด้วย sed ดังต่อไปนี้ -

$ cat /etc/passwd | sed '1, 5d' |more
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
$

คำสั่งดังกล่าวจะถูกนำไปใช้กับทุกบรรทัดตั้งแต่ 1 ถึง 5 ซึ่งจะเป็นการลบห้าบรรทัดแรก

ลองใช้ช่วงที่อยู่ต่อไปนี้ -

ซีเนียร์ ช่วงและคำอธิบาย
1

'4,10d'

สายที่เริ่มต้นจาก 4 วันจนถึง 10 วันจะถูกลบออก

2

'10,4d'

เพียง 10 THสายจะถูกลบออกเพราะ sed ไม่ทำงานในทิศทางตรงกันข้าม

3

'4,+5d'

สิ่งนี้จับคู่บรรทัดที่ 4 ในไฟล์ลบบรรทัดนั้นลบห้าบรรทัดถัดไปจากนั้นหยุดการลบและพิมพ์ส่วนที่เหลือ

4

'2,5!d'

ลบทุกอย่างยกเว้นนี้เริ่มต้นจาก 2 ครั้งจนถึง 5 THบรรทัด

5

'1~3d'

สิ่งนี้จะลบบรรทัดแรกก้าวข้ามสามบรรทัดถัดไปจากนั้นลบบรรทัดที่สี่ Sed ยังคงใช้รูปแบบนี้ต่อไปจนจบไฟล์

6

'2~2d'

สิ่งนี้บอกให้ sed ลบบรรทัดที่สองก้าวข้ามบรรทัดถัดไปลบบรรทัดถัดไปและทำซ้ำจนกว่าจะถึงจุดสิ้นสุดของไฟล์

7

'4,10p'

สายที่เริ่มต้นตั้งแต่ 4 วันจนถึง 10 ปีบริบูรณ์จะพิมพ์

8

'4,d'

สิ่งนี้สร้างข้อผิดพลาดทางไวยากรณ์

9

',10d'

นอกจากนี้ยังจะสร้างข้อผิดพลาดทางไวยากรณ์

Note - ขณะใช้ไฟล์ p คุณควรใช้ไฟล์ -nตัวเลือกเพื่อหลีกเลี่ยงการพิมพ์บรรทัดซ้ำ ๆ ตรวจสอบความแตกต่างระหว่างสองคำสั่งต่อไปนี้ -

$ cat /etc/passwd | sed -n '1,3p'
Check the above command without -n as follows −
$ cat /etc/passwd | sed '1,3p'

คำสั่งเปลี่ยนตัว

คำสั่งการแทนที่แสดงโดย sจะแทนที่สตริงใด ๆ ที่คุณระบุด้วยสตริงอื่นที่คุณระบุ

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

คำสั่งต่อไปนี้แทนที่เหตุการณ์แรกบนบรรทัดของสตริง root ด้วยสตริง amrood.

$ cat /etc/passwd | sed 's/root/amrood/'
amrood:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
..........................

เป็นสิ่งสำคัญมากที่จะต้องสังเกตว่าสิ่งยั่วยวนจะทดแทนเฉพาะการเกิดครั้งแรกบนเส้น หากรูทสตริงเกิดขึ้นมากกว่าหนึ่งครั้งในบรรทัดจะมีการแทนที่การจับคู่แรกเท่านั้น

เพื่อให้ sed ดำเนินการแทนที่ส่วนกลางให้เพิ่มตัวอักษร g ท้ายคำสั่งดังนี้ -

$ cat /etc/passwd | sed 's/root/amrood/g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...........................

ธงเปลี่ยนตัว

มีแฟล็กที่มีประโยชน์อื่น ๆ อีกมากมายที่สามารถส่งผ่านได้นอกเหนือจาก g แฟล็กและคุณสามารถระบุได้มากกว่าหนึ่งครั้ง

ซีเนียร์ ตั้งค่าสถานะและคำอธิบาย
1

g

แทนที่การแข่งขันทั้งหมดไม่ใช่แค่นัดแรก

2

NUMBER

แทนที่เพียงจำนวนวันแข่งขัน

3

p

หากมีการทดแทนให้พิมพ์ช่องว่างรูปแบบ

4

w FILENAME

หากทำการแทนที่แล้วให้เขียนผลลัพธ์ไปที่ FILENAME

5

I or i

จับคู่ในลักษณะที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่

6

M or m

นอกเหนือจากพฤติกรรมปกติของอักขระนิพจน์ทั่วไปพิเศษ ^ และ $ แฟล็กนี้ทำให้ ^ จับคู่สตริงว่างหลังขึ้นบรรทัดใหม่และ $ เพื่อให้ตรงกับสตริงว่างก่อนขึ้นบรรทัดใหม่

การใช้ตัวคั่นสตริงทางเลือก

สมมติว่าคุณต้องทำการแทนที่สตริงที่มีอักขระสแลชไปข้างหน้า ในกรณีนี้คุณสามารถระบุตัวคั่นอื่นได้โดยระบุอักขระที่กำหนดไว้หลังs.

$ cat /etc/passwd | sed 's:/root:/amrood:g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

ในตัวอย่างข้างต้นเราได้ใช้ : เป็น delimiter แทนที่จะใช้เครื่องหมายทับ / เพราะเราพยายามค้นหา /root แทนที่จะเป็นรากธรรมดา

แทนที่ด้วย Empty Space

ใช้สตริงการแทนที่ว่างเพื่อลบสตริงรูทจากไฟล์ /etc/passwd ไฟล์ทั้งหมด -

$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

การทดแทนที่อยู่

หากคุณต้องการแทนที่สตริง sh ด้วยสตริง quiet เฉพาะในบรรทัดที่ 10 คุณสามารถระบุได้ดังนี้ -

$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/quiet

ในทำนองเดียวกันหากต้องการทำการแทนที่ช่วงที่อยู่คุณสามารถทำสิ่งต่อไปนี้ -

$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet
daemon:x:1:1:daemon:/usr/sbin:/bin/quiet
bin:x:2:2:bin:/bin:/bin/quiet
sys:x:3:3:sys:/dev:/bin/quiet
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

ดังที่คุณเห็นจากผลลัพธ์ห้าบรรทัดแรกมีสตริง sh เปลี่ยนไปเป็น quietแต่เส้นที่เหลือไม่ถูกแตะต้อง

คำสั่งจับคู่

คุณจะใช้ p ตัวเลือกพร้อมกับ -n ตัวเลือกในการพิมพ์บรรทัดที่ตรงกันทั้งหมดดังนี้ -

$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

การใช้นิพจน์ทั่วไป

ในขณะที่จับคู่รูปแบบคุณสามารถใช้นิพจน์ทั่วไปซึ่งให้ความยืดหยุ่นมากขึ้น

ตรวจสอบตัวอย่างต่อไปนี้ซึ่งตรงกับบรรทัดทั้งหมดที่ขึ้นต้นด้วยdaemonแล้วลบออก -

$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

ต่อไปนี้เป็นตัวอย่างที่ลบบรรทัดทั้งหมดที่ลงท้ายด้วย sh -

$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync

ตารางต่อไปนี้แสดงอักขระพิเศษสี่ตัวที่มีประโยชน์มากในนิพจน์ทั่วไป

ซีเนียร์ ตัวละครและคำอธิบาย
1

^

ตรงกับจุดเริ่มต้นของบรรทัด

2

$

ตรงกับจุดสิ้นสุดของบรรทัด

3

.

จับคู่อักขระเดี่ยวใด ๆ

4

*

จับคู่อักขระก่อนหน้าเป็นศูนย์หรือมากกว่า

5

[chars]

จับคู่อักขระใด ๆ ที่กำหนดในตัวอักษรโดยที่อักขระเป็นลำดับของอักขระ คุณสามารถใช้อักขระ - เพื่อระบุช่วงของอักขระ

จับคู่อักขระ

ดูนิพจน์เพิ่มเติมเพื่อสาธิตการใช้งาน metacharacters. ตัวอย่างเช่นรูปแบบต่อไปนี้ -

ซีเนียร์ นิพจน์และคำอธิบาย
1

/a.c/

จับคู่บรรทัดที่มีสตริงเช่น a+c, a-c, abc, matchและ a3c

2

/a*c/

จับคู่สตริงเดียวกันพร้อมกับสตริงเช่น ace, yaccและ arctic

3

/[tT]he/

จับคู่สตริง The และ the

4

/^$/

จับคู่บรรทัดว่าง

5

/^.*$/

จับคู่ทั้งบรรทัดไม่ว่าจะเป็นอะไรก็ตาม

6

/ */

จับคู่ช่องว่างอย่างน้อยหนึ่งช่อง

7

/^$/

ตรงกัน blank เส้น

ตารางต่อไปนี้แสดงชุดอักขระที่ใช้บ่อย -

ซีเนียร์ ตั้งค่าและคำอธิบาย
1

[a-z]

จับคู่อักษรตัวพิมพ์เล็กตัวเดียว

2

[A-Z]

จับคู่ตัวอักษรตัวพิมพ์ใหญ่ตัวเดียว

3

[a-zA-Z]

ตรงกับตัวอักษรเดียว

4

[0-9]

จับคู่หมายเลขเดียว

5

[a-zA-Z0-9]

จับคู่ตัวอักษรหรือตัวเลขตัวเดียว

คีย์เวิร์ดคลาสตัวละคร

คำหลักพิเศษบางคำสามารถใช้ได้โดยทั่วไป regexpsโดยเฉพาะยูทิลิตี้ GNU ที่ใช้ regexps. สิ่งเหล่านี้มีประโยชน์มากสำหรับการทำให้นิพจน์ทั่วไปลดความซับซ้อนและเพิ่มความสามารถในการอ่าน

ตัวอย่างเช่นตัวละคร a through z และตัวละคร A through Zเป็นคลาสอักขระหนึ่งตัวที่มีคีย์เวิร์ด [[:alpha:]]

การใช้คีย์เวิร์ดคลาสอักขระตัวอักษรคำสั่งนี้จะพิมพ์เฉพาะบรรทัดเหล่านั้นในไฟล์ /etc/syslog.conf ไฟล์ที่ขึ้นต้นด้วยตัวอักษร -

$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'
authpriv.*                         /var/log/secure
mail.*                             -/var/log/maillog
cron.*                             /var/log/cron
uucp,news.crit                     /var/log/spooler
local7.*                           /var/log/boot.log

ตารางต่อไปนี้เป็นรายการคีย์เวิร์ดคลาสอักขระที่มีอยู่ทั้งหมดใน GNU sed

ซีเนียร์ คลาสตัวละครและคำอธิบาย
1

[[:alnum:]]

ตัวอักษรและตัวเลข [az AZ 0-9]

2

[[:alpha:]]

ตามตัวอักษร [az AZ]

3

[[:blank:]]

อักขระว่าง (ช่องว่างหรือแท็บ)

4

[[:cntrl:]]

ควบคุมอักขระ

5

[[:digit:]]

หมายเลข [0-9]

6

[[:graph:]]

อักขระที่มองเห็นได้ (ไม่รวมช่องว่าง)

7

[[:lower:]]

อักษรตัวพิมพ์เล็ก [az]

8

[[:print:]]

อักขระที่พิมพ์ได้ (อักขระที่ไม่ใช่ตัวควบคุม)

9

[[:punct:]]

อักขระเครื่องหมายวรรคตอน

10

[[:space:]]

ช่องว่าง

11

[[:upper:]]

อักษรตัวพิมพ์ใหญ่ [AZ]

12

[[:xdigit:]]

เลขฐานสิบหก [0-9 AF AF]

Aampersand อ้างอิง

sed metacharacter &แสดงถึงเนื้อหาของรูปแบบที่ตรงกัน ตัวอย่างเช่นสมมติว่าคุณมีไฟล์ชื่อphone.txt เต็มไปด้วยหมายเลขโทรศัพท์ดังต่อไปนี้ -

5555551212
5555551213
5555551214
6665551215
6665551216
7775551217

คุณต้องการสร้างไฟล์ area code(สามหลักแรก) ล้อมรอบด้วยวงเล็บเพื่อให้อ่านง่ายขึ้น ในการทำเช่นนี้คุณสามารถใช้อักขระแทนที่เครื่องหมายและ -

$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215

(666)5551216
(777)5551217

ที่นี่ในส่วนของรูปแบบคุณจะจับคู่ 3 หลักแรกแล้วใช้ & คุณกำลังแทนที่ 3 หลักเหล่านั้นด้วยรอบ parentheses.

การใช้คำสั่ง sed หลายคำสั่ง

คุณสามารถใช้คำสั่ง sed หลายคำสั่งในคำสั่ง sed เดียวดังนี้ -

$ sed -e 'command1' -e 'command2' ... -e 'commandN' files

ที่นี่ command1 ผ่าน commandNเป็นคำสั่ง sed ของประเภทที่กล่าวถึงก่อนหน้านี้ คำสั่งเหล่านี้ใช้กับแต่ละบรรทัดในรายการไฟล์ที่กำหนดโดยไฟล์

โดยใช้กลไกเดียวกันเราสามารถเขียนตัวอย่างหมายเลขโทรศัพท์ด้านบนได้ดังนี้ -

$ sed -e 's/^[[:digit:]]\{3\}/(&)/g'  \ 
   -e 's/)[[:digit:]]\{3\}/&-/g' phone.txt 
(555)555-1212 
(555)555-1213 
(555)555-1214 
(666)555-1215 
(666)555-1216 
(777)555-1217

Note - ในตัวอย่างข้างต้นแทนที่จะใช้คีย์เวิร์ดคลาสอักขระซ้ำ [[:digit:]] สามครั้งเราแทนที่ด้วย \{3\}ซึ่งหมายความว่านิพจน์ทั่วไปก่อนหน้าจะถูกจับคู่สามครั้ง เรายังได้ใช้\ เพื่อให้บรรทัดแตกและสิ่งนี้จะต้องถูกลบออกก่อนที่จะรันคำสั่ง

ย้อนกลับการอ้างอิง

ampersand metacharacterมีประโยชน์ แต่มีประโยชน์มากกว่านั้นคือความสามารถในการกำหนดพื้นที่เฉพาะในนิพจน์ทั่วไป พื้นที่พิเศษเหล่านี้สามารถใช้เป็นข้อมูลอ้างอิงในสตริงการแทนที่ของคุณ ด้วยการกำหนดส่วนเฉพาะของนิพจน์ทั่วไปคุณสามารถอ้างอิงกลับไปยังส่วนเหล่านั้นด้วยอักขระอ้างอิงพิเศษ

ทำ back referencesคุณต้องกำหนดภูมิภาคก่อนจากนั้นอ้างอิงกลับไปที่ภูมิภาคนั้น ในการกำหนดภูมิภาคให้คุณแทรกbackslashed parenthesesในแต่ละภูมิภาคที่น่าสนใจ พื้นที่แรกที่คุณล้อมรอบด้วยแบ็กสแลชจะถูกอ้างอิงโดย\1ภาคที่สองโดย \2และอื่น ๆ

สมมติ phone.txt มีข้อความดังนี้ -

(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217

ลองคำสั่งต่อไปนี้ -

$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \ 
   code: \1 Second: \2 Third: \3/' 
Area code: (555) Second: 555- Third: 1212 
Area code: (555) Second: 555- Third: 1213 
Area code: (555) Second: 555- Third: 1214 
Area code: (666) Second: 555- Third: 1215 
Area code: (666) Second: 555- Third: 1216 
Area code: (777) Second: 555- Third: 1217

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