<ก่อนหน้านี้ | เนื้อหา | ถัดไป>
ตรวจสอบรายชื่อโทรศัพท์ด้วย grep
ในตัวอย่างก่อนหน้านี้ เราดูหมายเลขโทรศัพท์เดียวและตรวจสอบการจัดรูปแบบที่เหมาะสม สถานการณ์ที่สมจริงยิ่งขึ้นคือการตรวจสอบรายการตัวเลขแทน เรามาสร้างรายการกัน เราจะทำสิ่งนี้โดยท่องคาถาอาคมไปยังบรรทัดคำสั่ง มันจะเป็นเวทย์มนตร์เพราะเราไม่ได้ครอบคลุมคำสั่งส่วนใหญ่ที่เกี่ยวข้อง แต่ไม่ต้องกังวล เราจะไปถึงที่นั่นในบทต่อๆ ไป นี่คือคาถา:
[me@linuxbox ~]$ สำหรับฉันใน {1..10}; ทำ echo "(${RANDOM:0:3}) ${RANDO M:0:3}-${RANDOM:0:4}" >> phonelist.txt; เสร็จแล้ว
[me@linuxbox ~]$ สำหรับฉันใน {1..10}; ทำ echo "(${RANDOM:0:3}) ${RANDO M:0:3}-${RANDOM:0:4}" >> phonelist.txt; เสร็จแล้ว
คำสั่งนี้จะสร้างไฟล์ชื่อ phonelist.txt ที่มีหมายเลขโทรศัพท์สิบหมายเลข แต่ละครั้งที่คำสั่งซ้ำ ตัวเลขอีกสิบตัวจะถูกเพิ่มลงในรายการ เรายังเปลี่ยนค่าได้ 10 ใกล้กับจุดเริ่มต้นของคำสั่งเพื่อสร้างหมายเลขโทรศัพท์มากหรือน้อย อย่างไรก็ตาม หากเราตรวจสอบเนื้อหาของไฟล์ เราพบว่าเรามีปัญหา:
[me@linuxbox ~]$ แมว phonelist.txt
(232) | 298-2265 |
(624) | 381-1078 |
(540) | 126-1980 |
(874) | 163-2885 |
(286) | 254-2860 |
(292) | 108-518 |
(129) | 44-1379 |
(458) | 273-1642 |
(686) | 299-8268 |
(198) | 307-2440 |
ตัวเลขบางตัวมีรูปแบบไม่ถูกต้อง ซึ่งเหมาะสำหรับจุดประสงค์ของเรา เนื่องจากเราจะใช้
grep เพื่อตรวจสอบพวกเขา
วิธีตรวจสอบที่มีประโยชน์วิธีหนึ่งคือการสแกนไฟล์เพื่อหาหมายเลขที่ไม่ถูกต้องและแสดงรายการผลลัพธ์:
[me@linuxbox ~]$ grep -Ev '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$'
phonelist.txt (292) 108-518
(129) 44-1379
[me@linuxbox ~]$
[me@linuxbox ~]$ grep -Ev '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$'
phonelist.txt (292) 108-518
(129) 44-1379
[me@linuxbox ~]$
ที่นี่เราใช้ -v ตัวเลือกในการสร้างการจับคู่แบบผกผันเพื่อให้เราจะส่งออกเฉพาะบรรทัดในรายการที่ไม่ตรงกับนิพจน์ที่ระบุ นิพจน์ประกอบด้วยอักขระเมตาของ anchor ที่ปลายแต่ละด้านเพื่อให้แน่ใจว่าตัวเลขนั้นไม่มีอักขระพิเศษที่ปลายด้านใดด้านหนึ่ง นิพจน์นี้ยังต้องการให้วงเล็บเป็นตัวเลขที่ถูกต้อง ไม่เหมือนกับตัวอย่างหมายเลขโทรศัพท์ก่อนหน้านี้