หัด Regex กับมะระ ตอน2

ต่อตอน 2 ของการหัด Regex กันเลยครับ เพื่อให้ได้อารมณ์ต่อเนื่อง ก็ มานั่งเล่นด้วยกันครับวันนี้ ขั้นแรก เอาข้อความใน ##### ใส่ไฟล์ชื่อ tmp ก่อน เนื้อความก็เป็น output ของ apt ครับ มะมีไรมาก

#####
Get:1 http://security.ubuntu.com gutsy-security Release.gpg [191B]
Ign http://security.ubuntu.com gutsy-security/restricted Translation-en_US
Ign http://security.ubuntu.com gutsy-security/main Translation-en_US
Get:2 http://archive.ubuntu.com gutsy Release.gpg [191B]
Ign http://archive.ubuntu.com gutsy/multiverse Translation-en_US
Ign http://archive.ubuntu.com gutsy/restricted Translation-en_US
Ign http://security.ubuntu.com gutsy-security/multiverse Translation-en_US
Ign http://security.ubuntu.com gutsy-security/universe Translation-en_US
Hit http://security.ubuntu.com gutsy-security Release
Ign http://archive.ubuntu.com gutsy/universe Translation-en_US
Ign http://archive.ubuntu.com gutsy/main Translation-en_US
Get:3 http://archive.ubuntu.com gutsy-updates Release.gpg [191B]
Ign http://archive.ubuntu.com gutsy-updates/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/multiverse Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/universe Translation-en_US
Get:4 http://archive.ubuntu.com gutsy-proposed Release.gpg [191B]
Ign http://archive.ubuntu.com gutsy-proposed/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-proposed/main Translation-en_US
Hit http://security.ubuntu.com gutsy-security/restricted Packages
Ign http://archive.ubuntu.com gutsy-proposed/multiverse Translation-en_US
Ign http://archive.ubuntu.com gutsy-proposed/universe Translation-en_US
Get:5 http://archive.ubuntu.com gutsy-backports Release.gpg [191B]
Hit http://security.ubuntu.com gutsy-security/main Packages
Hit http://security.ubuntu.com gutsy-security/multiverse Packages
Hit http://security.ubuntu.com gutsy-security/universe Packages
Ign http://archive.ubuntu.com gutsy-backports/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-backports/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-backports/multiverse Translation-en_US
Ign http://archive.ubuntu.com gutsy-backports/universe Translation-en_US
Hit http://archive.ubuntu.com gutsy Release
Hit http://archive.ubuntu.com gutsy-updates Release
Hit http://archive.ubuntu.com gutsy-proposed Release
Hit http://archive.ubuntu.com gutsy-backports Release
Hit http://archive.ubuntu.com gutsy/multiverse Packages
Hit http://archive.ubuntu.com gutsy/restricted Packages
Hit http://archive.ubuntu.com gutsy/universe Packages
Hit http://archive.ubuntu.com gutsy/main Packages
Hit http://archive.ubuntu.com gutsy-updates/restricted Packages
Hit http://archive.ubuntu.com gutsy-updates/main Packages
Hit http://archive.ubuntu.com gutsy-updates/multiverse Packages
Hit http://archive.ubuntu.com gutsy-updates/universe Packages
Hit http://archive.ubuntu.com gutsy-proposed/restricted Packages
Hit http://archive.ubuntu.com gutsy-proposed/main Packages
Hit http://archive.ubuntu.com gutsy-proposed/multiverse Packages
Hit http://archive.ubuntu.com gutsy-proposed/universe Packages
Hit http://archive.ubuntu.com gutsy-backports/restricted Packages
Hit http://archive.ubuntu.com gutsy-backports/main Packages
Hit http://archive.ubuntu.com gutsy-backports/multiverse Packages
Hit http://archive.ubuntu.com gutsy-backports/universe Packages
Fetched 5B in 4s (1B/s)
Reading package lists...
#####

ก่อนลงมือ สิ่งหนึ่งที่ผมได้รู้คือ
egrep = grep -E
fgrep = grep -F
rgrep = grep -r

เสร็จแล้ว เปิด terminal แล้ว cd ไปไดเรคทอรี่ที่เก็บไฟล์ tmp ไว้ แล้วมาลองเล่นด้วยกันดู

อันแรก
gumara@apple:~$ grep -A 2 main tmp
Ign http://security.ubuntu.com gutsy-security/main Translation-en_US
Get:2 http://archive.ubuntu.com gutsy Release.gpg [191B]
Ign http://archive.ubuntu.com gutsy/multiverse Translation-en_US
--
Ign http://archive.ubuntu.com gutsy/main Translation-en_US
Get:3 http://archive.ubuntu.com gutsy-updates Release.gpg [191B]
Ign http://archive.ubuntu.com gutsy-updates/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/multiverse Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/universe Translation-en_US
--
Ign http://archive.ubuntu.com gutsy-proposed/main Translation-en_US
Hit http://security.ubuntu.com gutsy-security/restricted Packages
Ign http://archive.ubuntu.com gutsy-proposed/multiverse Translation-en_US
--
Hit http://security.ubuntu.com gutsy-security/main Packages
Hit http://security.ubuntu.com gutsy-security/multiverse Packages
Hit http://security.ubuntu.com gutsy-security/universe Packages
--
Ign http://archive.ubuntu.com gutsy-backports/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-backports/multiverse Translation-en_US
Ign http://archive.ubuntu.com gutsy-backports/universe Translation-en_US
--
Hit http://archive.ubuntu.com gutsy/main Packages
Hit http://archive.ubuntu.com gutsy-updates/restricted Packages
Hit http://archive.ubuntu.com gutsy-updates/main Packages
Hit http://archive.ubuntu.com gutsy-updates/multiverse Packages
Hit http://archive.ubuntu.com gutsy-updates/universe Packages
--
Hit http://archive.ubuntu.com gutsy-proposed/main Packages
Hit http://archive.ubuntu.com gutsy-proposed/multiverse Packages
Hit http://archive.ubuntu.com gutsy-proposed/universe Packages
--
Hit http://archive.ubuntu.com gutsy-backports/main Packages
Hit http://archive.ubuntu.com gutsy-backports/multiverse Packages
Hit http://archive.ubuntu.com gutsy-backports/universe Packages
gumara@apple:~$

คือ หาบรรทัดที่มีคำว่า main จากนั้น แสดงบรรทัดที่อยู่ใต้มัน สองบรรทัด แล้วขั้นบรรทัดด้วย -- ทำแบบนี้ไปเรื่อยๆ

gumara@apple:~$ grep -B 2 main tmp
Get:1 http://security.ubuntu.com gutsy-security Release.gpg [191B]
Ign http://security.ubuntu.com gutsy-security/restricted Translation-en_US
Ign http://security.ubuntu.com gutsy-security/main Translation-en_US
--
Hit http://security.ubuntu.com gutsy-security Release
Ign http://archive.ubuntu.com gutsy/universe Translation-en_US
Ign http://archive.ubuntu.com gutsy/main Translation-en_US
Get:3 http://archive.ubuntu.com gutsy-updates Release.gpg [191B]
Ign http://archive.ubuntu.com gutsy-updates/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/main Translation-en_US
--
Get:4 http://archive.ubuntu.com gutsy-proposed Release.gpg [191B]
Ign http://archive.ubuntu.com gutsy-proposed/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-proposed/main Translation-en_US
--
Ign http://archive.ubuntu.com gutsy-proposed/universe Translation-en_US
Get:5 http://archive.ubuntu.com gutsy-backports Release.gpg [191B]
Hit http://security.ubuntu.com gutsy-security/main Packages
--
Hit http://security.ubuntu.com gutsy-security/universe Packages
Ign http://archive.ubuntu.com gutsy-backports/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-backports/main Translation-en_US
--
Hit http://archive.ubuntu.com gutsy/restricted Packages
Hit http://archive.ubuntu.com gutsy/universe Packages
Hit http://archive.ubuntu.com gutsy/main Packages
Hit http://archive.ubuntu.com gutsy-updates/restricted Packages
Hit http://archive.ubuntu.com gutsy-updates/main Packages
--
Hit http://archive.ubuntu.com gutsy-updates/universe Packages
Hit http://archive.ubuntu.com gutsy-proposed/restricted Packages
Hit http://archive.ubuntu.com gutsy-proposed/main Packages
--
Hit http://archive.ubuntu.com gutsy-proposed/universe Packages
Hit http://archive.ubuntu.com gutsy-backports/restricted Packages
Hit http://archive.ubuntu.com gutsy-backports/main Packages
gumara@apple:~$

คล้ายกับเมื่อกี๊ แต่กลับกัน คือ หา main แล้วแสดงสองบรรทัดที่อยู่ด้านบนด้วย

gumara@apple:~$ grep -C 1 main tmp
Ign http://security.ubuntu.com gutsy-security/restricted Translation-en_US
Ign http://security.ubuntu.com gutsy-security/main Translation-en_US
Get:2 http://archive.ubuntu.com gutsy Release.gpg [191B]
--
Ign http://archive.ubuntu.com gutsy/universe Translation-en_US
Ign http://archive.ubuntu.com gutsy/main Translation-en_US
Get:3 http://archive.ubuntu.com gutsy-updates Release.gpg [191B]
Ign http://archive.ubuntu.com gutsy-updates/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/multiverse Translation-en_US
--
Ign http://archive.ubuntu.com gutsy-proposed/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-proposed/main Translation-en_US
Hit http://security.ubuntu.com gutsy-security/restricted Packages
--
Get:5 http://archive.ubuntu.com gutsy-backports Release.gpg [191B]
Hit http://security.ubuntu.com gutsy-security/main Packages
Hit http://security.ubuntu.com gutsy-security/multiverse Packages
--
Ign http://archive.ubuntu.com gutsy-backports/restricted Translation-en_US
Ign http://archive.ubuntu.com gutsy-backports/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-backports/multiverse Translation-en_US
--
Hit http://archive.ubuntu.com gutsy/universe Packages
Hit http://archive.ubuntu.com gutsy/main Packages
Hit http://archive.ubuntu.com gutsy-updates/restricted Packages
Hit http://archive.ubuntu.com gutsy-updates/main Packages
Hit http://archive.ubuntu.com gutsy-updates/multiverse Packages
--
Hit http://archive.ubuntu.com gutsy-proposed/restricted Packages
Hit http://archive.ubuntu.com gutsy-proposed/main Packages
Hit http://archive.ubuntu.com gutsy-proposed/multiverse Packages
--
Hit http://archive.ubuntu.com gutsy-backports/restricted Packages
Hit http://archive.ubuntu.com gutsy-backports/main Packages
Hit http://archive.ubuntu.com gutsy-backports/multiverse Packages
gumara@apple:~$

ก็ หาบรรทัดที่มีคำว่า main แล้วแสดง 1 บรรทัดด้านบนด้านล่างด้วย แล้วก็ขั้นด้วย --

gumara@apple:~$ grep -c main tmp
10
gumara@apple:~$

ก็ นับจำนวนบรรทัดที่มีคำว่า main

gumara@apple:~$ grep main tmp -H
tmp:Ign http://security.ubuntu.com gutsy-security/main Translation-en_US
tmp:Ign http://archive.ubuntu.com gutsy/main Translation-en_US
tmp:Ign http://archive.ubuntu.com gutsy-updates/main Translation-en_US
tmp:Ign http://archive.ubuntu.com gutsy-proposed/main Translation-en_US
tmp:Hit http://security.ubuntu.com gutsy-security/main Packages
tmp:Ign http://archive.ubuntu.com gutsy-backports/main Translation-en_US
tmp:Hit http://archive.ubuntu.com gutsy/main Packages
tmp:Hit http://archive.ubuntu.com gutsy-updates/main Packages
tmp:Hit http://archive.ubuntu.com gutsy-proposed/main Packages
tmp:Hit http://archive.ubuntu.com gutsy-backports/main Packages
gumara@apple:~$

ก็ สังเกตุดู มันจะแสดงชื่อไฟล์ด้านหน้าบรรทัดคับป๋ม

gumara@apple:~$ grep main tmp -h
Ign http://security.ubuntu.com gutsy-security/main Translation-en_US
Ign http://archive.ubuntu.com gutsy/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-proposed/main Translation-en_US
Hit http://security.ubuntu.com gutsy-security/main Packages
Ign http://archive.ubuntu.com gutsy-backports/main Translation-en_US
Hit http://archive.ubuntu.com gutsy/main Packages
Hit http://archive.ubuntu.com gutsy-updates/main Packages
Hit http://archive.ubuntu.com gutsy-proposed/main Packages
Hit http://archive.ubuntu.com gutsy-backports/main Packages
gumara@apple:~$

ส่วนอันนี้ไม่แสดงชื่อไฟล์ด้านหน้าครับ เพราะกรณีถ้าเรา grep msg จากหลายไฟล์มันจะแสดงชื่อไฟล์ด้านหน้า เราสามารถใช้ออพชั่น h เพื่อให้มันไม่แสดงชื่อไฟล์ได้คับ

gumara@apple:~$ grep Main tmp -i
Ign http://security.ubuntu.com gutsy-security/main Translation-en_US
Ign http://archive.ubuntu.com gutsy/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-proposed/main Translation-en_US
Hit http://security.ubuntu.com gutsy-security/main Packages
Ign http://archive.ubuntu.com gutsy-backports/main Translation-en_US
Hit http://archive.ubuntu.com gutsy/main Packages
Hit http://archive.ubuntu.com gutsy-updates/main Packages
Hit http://archive.ubuntu.com gutsy-proposed/main Packages
Hit http://archive.ubuntu.com gutsy-backports/main Packages
gumara@apple:~$

อันนี้คือ ไม่สนใจตัวเล็กตัวใหญ่คับ

gumara@apple:~$ grep main * -L
36344-debian_logo_01.svg
avscan.ini
avscan_scan_list.ini
bydoing
chantra-book
gumara@apple:~$

แสดงชื่อไฟล์ที่ไฟล์นั้นไม่มีข้อความว่า main ข้างในคับ

gumara@apple:~$ grep main * -l
core.4560
core.4785
onfig
strings_english.txt
tmp
tmp~
typescript.txt
ubuntuclub-7.10-desktop-i386-build10.iso
ubuntuclub-7.10E-desktop-i386.iso
ubuntuclub-addoncd-CD1.iso
uploadr.py
gumara@apple:~$

ก็ กลับกันครับ แสดงชื่อไฟล์ที่ในนั้นมีคำว่า main อยู่ข้างในครับ

gumara@apple:~$ grep -m 3 main tmp
Ign http://security.ubuntu.com gutsy-security/main Translation-en_US
Ign http://archive.ubuntu.com gutsy/main Translation-en_US
Ign http://archive.ubuntu.com gutsy-updates/main Translation-en_US
gumara@apple:~$

เอาบรรทัดที่มีคำว่า main มาแค่ 3 บรรทัดพอ รูปหล่อ

gumara@apple:~$ grep -n main tmp
3:Ign http://security.ubuntu.com gutsy-security/main Translation-en_US
11:Ign http://archive.ubuntu.com gutsy/main Translation-en_US
14:Ign http://archive.ubuntu.com gutsy-updates/main Translation-en_US
19:Ign http://archive.ubuntu.com gutsy-proposed/main Translation-en_US
24:Hit http://security.ubuntu.com gutsy-security/main Packages
28:Ign http://archive.ubuntu.com gutsy-backports/main Translation-en_US
38:Hit http://archive.ubuntu.com gutsy/main Packages
40:Hit http://archive.ubuntu.com gutsy-updates/main Packages
44:Hit http://archive.ubuntu.com gutsy-proposed/main Packages
48:Hit http://archive.ubuntu.com gutsy-backports/main Packages
gumara@apple:~$

แสดงเลขบรรทัดด้านหน้าด้วยจ้า คนสวย

gumara@apple:~$ grep -o main tmp
main
main
main
main
main
main
main
main
main
main
gumara@apple:~$

แสดงเฉพาะข้อความที่ match กับคำค้นครับ

ซึ่งคงต้องมีคำถามตามมาว่า แล้วจะเอาไปทำไรล่ะเฟ้ย

ซึ่งจริงๆแล้ว มันก็อาจเอามาประยุกต์ใช้ร่วมกับออพชั่นอื่น เช่น แบบนี้ครับ
gumara@apple:~$ grep -on main tmp|grep -v '^3'
11:main
14:main
19:main
24:main
28:main
40:main
44:main
48:main
gumara@apple:~$

อธิบายครับ ก็ -on ก็คือ แสดงเฉพาะบรรทัดที่มีคำว่า main โดยแสดงเฉพาะคำว่า main แล้วก็เติมเลขบรรทัดไปข้างหน้าด้วย จากนั้น ส่ง output ไป grep อีก โดย -v คือเอาบรรทัดที่ขึ้นต้นด้วยเลข 3 ออกไป แค่นี้ครับ

gumara@apple:~$ grep -q main tmp
gumara@apple:~$

อันนี้ให้ quiet ครับ คือไม่ต้องแสดง output ครับ

วันนี้พอแล้ว เบื่อ

Comments

nonyio's picture

<p>We are the most professional, highest quality team game, we have the cheapest, safest <a href="http://www.toppowerlevel.net/buy.php">wow gold</a> service. We can spend a little money you get the most fun game. The game allows you to upgrade to reduce dry time, so enjoy the fun of other games, our team provide <a href="http://www.toppowerlevel.net">wow power leveling</a> and <a href="http://www.toppowerlevel.net/powerlist.php?fid=3965">Warhammer Online Power Leveling</a> services and other games, if you are interested, you can go to our website to find what you need of.</p>