แยกวิเคราะห์ล็อก vsftpd พร้อมเชลล์สคริปต์


0

ฉันพยายามแยกบรรทัดนี้ด้วย vsftpd:

Sun Apr 7 07:23:33 2013 [pid 23590] [cam02430] OK UPLOAD: Client "206.132.183.209", "/20130407/07/20130407_072324D.avi", 496846 bytes, 383.38Kbyte/sec

ด้วย:

cut -d" " -f9 | sed 's/\[\(.*\)\]/\1/'

นี่เป็นการแยกวิเคราะห์ชื่อผู้ใช้สำเร็จซึ่งก็คือ: cam02430

แต่ตอนนี้วันที่มีการเปลี่ยนแปลง:

Wed Apr 10 10:37:50 2013 [pid 26137] [cam02299] OK UPLOAD: Client "206.132.183.201", "/20130410/10/20130410_103802D.avi", 496838 bytes, 363.67Kbyte/sec

ตอนนี้ฉันจะแยกวิเคราะห์นี้ใช้:

cut -d" " -f8 | sed 's/\[\(.*\)\]/\1/'

มีวิธีที่ดีกว่าในการแยกชื่อผู้ใช้ในหนึ่งบรรทัด? ฉันต้องการติดเชลล์สคริปต์

คำตอบ:


1

สัญชาตญาณแรกของฉันคือแยกส่วนผู้ใช้ (โดยใช้ grep -o ) สิ่งที่ดีเกี่ยวกับมันคือมันมีเครื่องหมายที่ไม่ซ้ำกัน (ค่อนข้าง) - วงเล็บ

ดังนั้น grep ด้านล่างจะแยกฟิลด์ (สอง) ที่มีวงเล็บอยู่รอบ ๆ นั้นจากนั้นนำฟิลด์แรก (ID กระบวนการ) ออกแล้วแยกวงเล็บออกจากส่วนที่เหลือ (ฟิลด์ผู้ใช้)

 < vsftp.log grep -o '\[[^]]*\] *\[[^]]*\]' | sed -e 's/\[[^]]*\] *//' -e 's/\[\(.*\)\]/\1/'

หากคุณสามารถรับประกันว่าไม่มีช่องว่างในชื่อผู้ใช้คุณสามารถใช้ประโยชน์และทำให้สิ่งต่าง ๆ ง่ายขึ้นเล็กน้อย ค้นหาฟิลด์ที่มีวงเล็บเหลี่ยมโดยไม่มีช่องว่าง (ฟิลด์ pid จะมีฟิลด์เหล่านั้น) จากนั้นทำการตัดแต่ง

< vsftp.log grep -o '\[[^] ]*\]' | sed -e 's/\[\(.*\)\]/\1/'

มันใช้งานได้ แต่อาจไม่เหมาะสม


ฉันสามารถรับประกันได้ว่าชื่อผู้ใช้ไม่มีช่องว่าง ขอบคุณ
Tom
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.