Score:0

วิธีบันทึกบรรทัดเฉพาะของเอาต์พุตบรรทัดคำสั่ง

ธง cn

ฉันมีไฟล์ปฏิบัติการที่สร้างสิ่งต่อไปนี้ให้กับเทอร์มินัล:

---เริ่ม---
ข้อความบางส่วน
ข้อความเพิ่มเติม
-1.
1.
0.39
10
-199
ข้อความเพิ่มเติม
   สมบูรณ์
---จบ---

ฉันต้องการเขียนเฉพาะค่าตัวเลขในเทอร์มินัลลงในไฟล์ ตอนนี้ผมใช้

./executable 2>&1 | grep -vE 'S|M|s|^[--]|^[ ]' | ที log.txt

นี่ดูเหมือนจะทำในสิ่งที่ฉันต้องการ โดยเฉพาะอย่างยิ่ง เมื่อใช้ -v ฉันกำลังระบุสิ่งที่จะยกเว้นอย่างชัดเจน อย่างไรก็ตาม ดูเหมือนว่าจะไม่ได้ผลเนื่องจากฉันจะต้องเพิ่มตัวอักษรทั้งหมด (ทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก) เพื่อให้แน่ใจว่ามีการเพิ่มเฉพาะค่าตัวเลขลงในไฟล์ log.txt

มีการเขียนค่าตัวเลขทั้งหมด (บวกและลบ) ลงในไฟล์ที่ดีกว่าหรือไม่

in flag
คุณกำลังมองหา regex ใหม่หรือไม่? '^[0-9-].*$' จะจับทั้งบรรทัดที่ขึ้นต้นด้วยหลักหรือเครื่องหมายลบ หรือใช้ \d สำหรับตัวเลข ดูเช่น [regular-expressions.info](https://www.regular-expressions.info/quickstart.html)
hr flag
ดูตัวอย่าง [grep - only allow floating point regex](https://unix.stackexchange.com/questions/397784/only-allow-floating-points-regex) and [Matching Floating Point Numbers with a Regular Expression](https //www.regular-expressions.info/floatingpoint.html)
bac0n avatar
cn flag
@pbhj ควรย้ายจุดไปที่คลาสอักขระ `'^[0-9.-]*$'` แต่เนื่องจาก @steeldrive ชี้ว่าอาจไม่เพียงพอ
waltinator avatar
it flag
"`-`" จะสับสนกับตัวดำเนินการ "range" ("`[0-9]`") เว้นแต่ว่าจะอยู่ที่จุดเริ่มต้นของนิพจน์ ใช้ "`^[-.0-9]+`" คุณสามารถใช้ตัวเลือก "`-o`" ของ `grep` เพื่อส่งออกเฉพาะสตริงที่ตรงกัน
bac0n avatar
cn flag
@waltinator ที่จะจับคู่ Start และ End ด้วย...
in flag
@bac0n ไม่มีตัวเลขใดที่ขึ้นต้นด้วยจุดทศนิยม regex ของฉันคือการค้นหาบรรทัดที่ขึ้นต้นด้วยตัวเลขหรือ "-" ส่วนที่เหลือของบรรทัดสามารถเป็นอักขระใดก็ได้ หากคุณใส่จุดไว้ในตัวเลือกช่วง คุณจะต้องหลีกเลี่ยงจุดนั้นเพราะ "." หมายถึง "อักขระใดก็ได้ในครั้งเดียว" และอาจจำเป็นต้องหลีกเลี่ยง "-" (เช่น "\-") แต่ถ้าไม่ใช่ระหว่างอักขระอื่นสองตัว ฉันพบว่าเอ็นจิ้น regex รับรู้เสมอว่าเป็นอักขระแยกต่างหาก ขึ้นอยู่กับรุ่นของ grep (หรือโปรแกรมอื่น ๆ ); ของฉันใช้ได้กับอินพุตที่กำหนดใน GNU Grep 3.6; ทดสอบบน Kali
bac0n avatar
cn flag
@pbhj ก่อน รูปแบบจะตรงกับแท็กเริ่มต้นและสิ้นสุดด้วย ถัดไป จุดในวงเล็บ `[.]` จะถูกตีความตามตัวอักษร (ไม่จำเป็นต้องหลีก) หากยัติภังค์ถูกวางไว้ก่อนหรือหลังในคลาสช่วง เครื่องหมายยัติภังค์จะถูกตีความตามตัวอักษรด้วย
in flag
คุณอาจจะถูกต้องเกี่ยวกับจุดตามตัวอักษร ไม่ใช่สิ่งที่ฉันมีประสบการณ์ แต่ยัติภังค์ที่ไม่ต้องการการหลบหนีนั้นใช้งานได้อย่างแน่นอน ทดสอบบน GNU Grep อย่างที่ฉันพูด มันตรงกับจุดเริ่มต้นเพราะเขามองหาบรรทัดที่มีตัวเลขที่จุดเริ่มต้น มันตรงกับจุดสิ้นสุดเพราะตัวอย่างแสดงให้เห็นว่าเขาต้องการทั้งบรรทัดที่มีตัวเลข (หรือลบ) อยู่ ลองมัน.
bac0n avatar
cn flag
`เสียงสะท้อน '---จบ---' | grep '^[0-9-].*$'`
Score:1
ธง cn

คุณเพียงแค่ต้องยกเว้นบรรทัดที่มีข้อความอยู่ ใช้ grep นี้ในคำสั่งของคุณ:

grep -v '[อา-ซ่า-z]'

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา