หัด Regex กับมะระ ตอน2
Posted in:
ต่อตอน 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 ครับ
วันนี้พอแล้ว เบื่อ



Post new comment