Sublime - ลบบรรทัดทั้งหมดที่มีค่าเฉพาะ


116

ฉันมีไฟล์บันทึก 900mb ซึ่งฉันสามารถเปิดได้ใน SublimeText 3 ไฟล์นี้มีเส้นคล้ายกับต่อไปนี้

10/08/2014 23:45:31:828,Information,,,,ExportManager: ,No records to send and/or not connected

ฉันจะกรองบรรทัดทั้งหมดที่มีไฟล์ No records to send and/or not connected


ในขณะที่โซลูชันด้านล่างใช้งานได้งานประเภทนี้ควรทำด้วย sed / awk สำหรับไฟล์ขนาดใหญ่
บาร์

คำตอบ:


229

คุณสามารถทำการค้นหาและแทนที่นิพจน์ทั่วไปได้:

คลิกค้นหา> แทนที่

ตรวจสอบให้แน่ใจว่าได้กดปุ่มนิพจน์ทั่วไป

สำหรับฟิลด์ Find What ให้ใส่:

^.*No records to send and/or not connected.*\n

เว้นฟิลด์แทนที่ด้วยว่างไว้

คลิกแทนที่ทั้งหมด


16
การหยุดเต็ม / งวดในตอนท้ายมีความสำคัญหากไม่มีมันจะไม่ทำงาน หรือคุณสามารถใช้สิ่งนี้:^.*No records to send and/or not connected\S.*$
Navigatron

โซลูชันนี้เป็นวิธีเดียวที่เป็นไปได้หากคุณใช้งานไฟล์ขนาดใหญ่ เครื่องของฉันค้างเป็นเวลาหลายนาทีเมื่อฉันCtrl+Shift+Kเลือก 200,000 บรรทัด
Przemek D

Imma ลองใช้ไฟล์ 26,000,000 บรรทัดของฉัน: ')
YB สาเหตุ

64

สำหรับคนที่ไม่ต้องการเขียน regex - คุณสามารถเลือกสตริงการค้นหากดctrl+cmd+gหรือเลือก "Quick Find All" จากเมนูซึ่งจะทำให้คุณได้รับการเลือกสำหรับแต่ละสตริงที่ตรงกัน จากนั้นHomeจะย้ายเคอร์เซอร์การเลือกทั้งหมดไปที่จุดเริ่มต้นของบรรทัดshift+Endจะเลือกทุกบรรทัดที่ตรงกันและdel, delจะลบทั้งหมด

การแก้ไขเคอร์เซอร์หลายรายการเป็นเรื่องสนุก!


4
นี่เป็นเคล็ดลับทั่วไปที่มีประโยชน์มาก วัตถุประสงค์ของฉันคือการลบบรรทัดทั้งหมดที่มีสตริง ฉันเลือกหนึ่งอินสแตนซ์จากนั้นใช้ "QuickFind" กับทางลัด Ctrl+Cmd+Gตามที่ Leonid แนะนำเพื่อเลือกสตริงเหล่านั้นทั้งหมด หลังจากนี้ฉันสามารถไปที่ "Delete Line" ได้โดยตรงCtrl-Shift-Kและทำการผ่าตัดเส้นทั้งหมดที่มีสตริงนี้ออกในทันที Sublime Text เป็นโปรแกรมแก้ไขข้อความที่ดีที่สุดที่ฉันเคยใช้
MiB

ctrl + cmd + g เหมือนกับ ctrl + alt + g บน Windows หรือไม่ ฉันไม่สามารถทำงานนี้ได้
แพนด้าดำ

@black panda สำหรับ windows "Quick Find All" คือ alt + f3 - ขอบคุณ Leonid +1
Christopher

หากคุณเป็นเหมือนฉันและคุณไม่มีปุ่มโฮมคุณสามารถใช้ CMD + <- (ลูกศรซ้าย)
Koray Tugay

4
คุณยังสามารถใช้ cmd + L เพื่อขยายการเลือกไปยังบรรทัด
Koray Tugay

53

ฉันไม่สามารถทำให้ regex ทำงานได้ดังนั้นฉันจึงใช้วิธี Alt-F3 จากคำตอบนี้:

/superuser/452189/how-can-i-filter-a-file-for-lines-containing-a-string-in-sublime-text-2/598999#598999

  1. เลือกสตริงที่สนใจ
  2. กดAlt+ F3เพื่อเข้าสู่โหมดหลายเคอร์เซอร์ในทุกเหตุการณ์ ( Ctrl+ CMD+ Gบน Mac OS X)
  3. Hit Ctrl+ L[ดูความคิดเห็น] ( Cmd+ Lบน Mac)
  4. คัดลอกวางการเลือกไปยังบัฟเฟอร์อื่น
  5. Del

2
สองสิ่ง: (1) คุณสามารถเชื่อมโยงไปยังคำตอบแต่ละข้อเช่นนี้ (2) คุณควรสรุปคำตอบอื่น ๆ ที่นี่ (และเชี่ยวชาญเพื่อตอบคำถามนี้ตามความเหมาะสม)
คอมไพเลอร์เด่น

4
คุณสามารถแทนที่ขั้นตอนที่ 3 และ 4 ด้วยCTRL + Lซึ่งจะขยายการเลือกไปยังทั้งบรรทัดรวมถึงตัวแบ่งบรรทัด
Chnossos

2
สำหรับคนที่ชอบฉันสาปแช่งด้วยรูปแบบคีย์ MAC: Ctrl+Cmd+Gสำหรับหลายเคอร์เซอร์ในทุกCmd+Lเหตุการณ์เพื่อขยายเส้นและคัดลอก / วางตามปกติ
Cyril Duchon-Doris

27

นี่คือสิ่งที่ฉันพบสำหรับผู้ใช้ windows:

  1. เลือกสตริง (ทุกบรรทัดที่มีสตริงนี้จะถูกลบออก)
  2. กด ALT + F3
  3. กด Ctrl + L
  4. กด Delete

21

รหัส regex ที่แนะนำข้างต้นไม่ทำงานในกรณีของฉัน แต่มันใช้งานได้:

.*(text in question).*

มันจะปล่อยให้มีบรรทัดว่างบนรหัสของคุณคุณต้องการหรือไม่? ถ้าไม่มีให้เพิ่ม\nหรือ$ท้าย:.*(text in question).*\n
ผู้ใช้

หากบรรทัดมีโครงสร้างเหมือน "abc / xyz / something" ให้ใช้ regex ให้เพิ่ม '\' ตัวอย่างเช่นถ้าเราต้องค้นหาอะไรก็ตามที่อยู่ระหว่าง abc / และ / something นิพจน์จะเป็น: abc /\.*.*\/ something
Avik

ใช้ได้ผลสำหรับฉันหากคุณต้องการการแข่งขันหลายรายการเหมือนที่ฉันทำให้ใช้|ดังนี้:.*(a).*|.*(b).*|.*(c).*
bryc

0

ฉันพบปัญหาที่คล้ายกันในการแก้ไขแผนผังเว็บไซต์

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

  1. คัดลอกคำสุดท้ายในบรรทัดที่คุณต้องการลบ
  2. ค้นหาทั้งหมด
  3. กดลบเพื่อลบทั้งบรรทัด

0

คำตอบข้างต้นเป็นวิธีที่ถูกต้อง แต่ถ้าคุณต้องการกำจัดแถวด้วยสตริงเดียวให้ทำ Find -> Replace -> ใส่^.*[a-zA-Z]+.*\nในส่วน find และแทนที่ด้วยค่าว่าง กดปุ่มแทนที่ทั้งหมดสิ่งนี้จะลบแถวทั้งหมดที่มีแม้แต่สตริงเดียวอยู่ในนั้น

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