เป็นไปได้ไหมที่จะเปลี่ยนลำดับของก้อนกลม?


12

ฉันกำลังพยายามแสดงข้อความทั้งหมดจากข้อความ syslog ตามลำดับเวลาโดยทำสิ่งต่อไปนี้

grep squiggle /var/log/messages*

น่าเสียดายที่รูปแบบ glob ตรงกับไฟล์ที่ใช้งานในปัจจุบันก่อน เช่น.

/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312

ซึ่งหมายความว่าข้อความล่าสุดจะปรากฏขึ้นก่อนตามด้วยข้อความประวัติศาสตร์ตามลำดับเวลา

เป็นไปได้หรือไม่ที่จะปรับพฤติกรรมรูปแบบแบบกลมเพื่อทำการจับคู่ที่ว่างเปล่า (เช่นเพิ่งmessages) ปรากฏที่ส่วนท้ายของรายการหรือไม่

หากไม่เป็นเช่นนั้นจะเป็นวิธีที่ดีในการแก้ไขปัญหานี้อย่างไร


2
คุณสามารถย้อนกลับผลลัพธ์โดยใช้tac: grep squiggle /var/log/messages* | tac...
pbm

คำตอบ:


8

ฉันไม่รู้วิธีเปลี่ยนลำดับการเรียงตัว แต่มีวิธีแก้ปัญหาง่าย ๆ สำหรับกรณีของคุณ:

grep squiggle /var/log/messages-* /var/log/messages

เช่นไม่ตรงกับmessagesไฟล์ในรูปแบบ glob ของคุณและเพิ่มลงในส่วนท้ายของgrepรายการอาร์กิวเมนต์


ขอบคุณสำหรับสิ่งนั้น รับการแก้ไขปัญหาที่ซับซ้อนกว่าที่จำเป็น!
Burhan Ali

1
grep squiggle /var/log/messages{-*,}หรือความพอใจเป็นพิเศษและความซ้ำซ้อนน้อยกว่าการใช้งาน (เรียกว่า "การขยาย bash brace" ถ้าคุณต้องการ google it)
Wildcard

11

ใน zsh คุณสามารถควบคุมคำสั่งของการแข่งขัน (เหนือสิ่งอื่น) กับรอบคัดเลือก glob

echo /var/log/messages*        # usual lexicographic order
echo /var/log/messages*(On)    # reverse lexicographic order
echo /var/log/messages*(om)    # reverse chronological order (ascending mtime)
echo /var/log/messages*(Om)    # chronological order order (descending mtime)

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

ที่นี่ลำดับของไฟล์ที่เหมาะสมคือลำดับตามลำดับเวลา คุณสามารถเลียนแบบได้อย่างง่ายดายตามชื่อแม้ว่าและที่ทำงานได้แม้ในทุบตี:

grep squiggle /var/log/messages{-*,}

ฉันประทับใจ zsh มากขึ้นทุกครั้งที่อ่าน
Burhan Ali

ฉันจะรับไฟล์ (ตามลำดับ) จาก zsh แล้วส่งกลับไปยัง bash ได้หรือไม่
Wowfunhappy

@Wowfunhappy ใช่ แต่คุณต้องระวังในการรักษาตัวละครพิเศษอย่างถูกต้อง ถามคำถามใหม่
Gilles 'หยุดความชั่วร้าย'

2

คุณสามารถใช้ backticks รวมกับ ls -tr (เรียงลำดับตามเวลา mod และย้อนกลับ) เช่นนี้

grep squiggle `ls -tr /var/log/messages*`
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.