Regex: ลบบรรทัดที่มีคำว่า "ช่วยเหลือ" ฯลฯ


371

ฉันมีเอกสารคำสั่งยาว ใช้ Notepad ++ หรือ regex ฉันต้องการลบทุกบรรทัดที่มี "ความช่วยเหลือ" รวมถึง keyboard_help ฯลฯ

สิ่งนี้สามารถทำได้?

คำตอบ:


945

สิ่งนี้สามารถทำได้ด้วย Notepad ++:

  • ไปที่เมนูค้นหาCtrl+ Fและเปิดแท็บทำเครื่องหมาย
  • ทำเครื่องหมายที่บรรทัดบุ๊กมาร์ก (หากไม่มีการปรับปรุงแท็บมาร์คเป็นเวอร์ชันปัจจุบัน)

  • ป้อนคำค้นหาของคุณและคลิกทำเครื่องหมายทั้งหมด

    • บรรทัดทั้งหมดที่มีคำค้นหาจะถูกคั่นไว้
  • ตอนนี้ไปที่เมนูค้นหา →ที่คั่นลบบรรทัดที่คั่นไว้

  • เสร็จสิ้น


36
ใช่ นอกจากนี้ยังมี 'ลบเส้นที่ไม่ได้ทำเครื่องหมาย' ซึ่งก็เหมือนกับ grep สิ่งที่ฉันต้องการ!
Chloe

6
ขอบคุณนี่เป็นกลลวงที่เรียบร้อย ฉันควรจะทำให้เสร็จด้วยการคลิกเพียงไม่กี่ครั้งกว่าใช้คอนโซล Unix (ไม่สนใจว่าฉันส่วนใหญ่อยู่บน Windows) cdเข้าสู่เส้นทางและพิมพ์คำสั่งที่ซับซ้อน (กังวลเกี่ยวกับไวยากรณ์ ไม่มีการสำรองข้อมูล) [ อย่าเข้าใจฉันผิดฉันใช้คำสั่งคอนโซลตลอดเวลาสำหรับสิ่งอื่น ๆ แต่สำหรับบางสิ่งเช่นนี้มันเป็นเพียง overkill]
ADTC

2
เพิ่งช่วยฉันได้เวลา :-)
Brlja

3
การตรวจสอบBOOKMARK LINEเป็นสิ่งสำคัญที่นี่มิฉะนั้นจะไม่ทำงาน!
HaSeeB MiR

1
@AndrewSchultz ขออภัย แต่ไม่
stema

187

อีกวิธีในการทำเช่นนี้ใน Notepad ++ คือทั้งหมดในกล่องโต้ตอบค้นหา / แทนที่และด้วย regex:

  • Ctrl+ hเพื่อเปิดกล่องโต้ตอบค้นหาแทนที่

  • ในFind what:กล่องข้อความรวม regex ของคุณ: .*help.*\r?\n(ซึ่ง\rเป็นตัวเลือกในกรณีที่ไฟล์ไม่มีจุดสิ้นสุดบรรทัด Windows)

  • เว้นReplace with:ช่องข้อความว่างไว้

  • ตรวจสอบให้แน่ใจว่าได้เลือกปุ่มตัวเลือกนิพจน์ทั่วไปในพื้นที่โหมดการค้นหา จากนั้นคลิกReplace Allและ voila! ลบบรรทัดทั้งหมดที่มีข้อความค้นหาของคุณhelpแล้ว

วิธีการแทนที่บรรทัดใน N ++


17
คำตอบที่ดีกว่าการใช้แท็บเครื่องหมายเนื่องจากสามารถทำได้สำหรับ "ค้นหาในไฟล์"
Alex

2
ตรวจสอบให้แน่ใจว่าได้หลีกเลี่ยงอักขระพิเศษเช่นวงเล็บด้วยแบ็กสแลช
Noumenon

4
ตรวจสอบให้แน่ใจว่าได้ยกเลิกการเลือก ". match newline"
MagTun

1
คำตอบที่ดีขึ้นเนื่องจากประสิทธิภาพที่สูงขึ้น ด้วยไฟล์> 1 ล้านเส้นวิธีการคั่นหน้าจะขยายไปถึงสูงสุดด้วยเครื่องจักรที่ทันสมัย
Roland Ettinger

17

ใช้งานง่ายด้วยgrep:

grep -v help filename

ผนวก> newFileNameเพื่อเปลี่ยนทิศทางเอาต์พุตไปยังไฟล์ใหม่


ปรับปรุง

เพื่อชี้แจงให้ชัดเจนพฤติกรรมปกติจะพิมพ์เส้นบนหน้าจอ หากต้องการไพพ์ไปยังไฟล์>สามารถใช้ ดังนั้นในคำสั่งนี้:

grep -v help filename > newFileName
  1. grepเรียกgrepโปรแกรมอย่างชัดเจน
  2. -vเป็นแฟล็กที่จะกลับด้าน โดย defaulf grepพิมพ์บรรทัดที่ตรงกับรูปแบบที่กำหนด ด้วยการตั้งค่าสถานะนี้มันจะพิมพ์บรรทัดที่ไม่ตรงกับรูปแบบ
  3. help เป็นรูปแบบที่จะจับคู่
  4. filename เป็นชื่อของไฟล์อินพุต
  5. > เปลี่ยนเส้นทางผลลัพธ์ไปยังรายการต่อไปนี้
  6. newFileName ไฟล์ใหม่ที่จะบันทึกผลลัพธ์

ดังที่คุณอาจสังเกตเห็นว่าคุณจะไม่ลบสิ่งต่าง ๆ ในไฟล์ของคุณ grepจะอ่านมันและไฟล์อื่นจะถูกบันทึก, แก้ไขตาม


@Kevin Duke: อนิจจา! นั่นอาจหมายความว่าคุณไม่ได้grepติดตั้ง อย่างไรก็ตามฉันขอแนะนำให้คุณติดตั้ง GNU grep แน่นอนว่ามันจะทำงานบน Windows ได้และเป็นเครื่องมือที่มีประโยชน์จริงๆ
sidyll

@sidyll รู้ว่า grep คืออะไรและมันทำออกมาเป็นจำนวนมากอาจเป็นเพราะฉันไม่ได้ระบุไฟล์ที่ส่งออก
39811 Lemon

2
@ Kevin Duke: ดังที่ฉันได้กล่าวไปแล้วในคำตอบก่อนหน้านี้ผลลัพธ์สามารถเปลี่ยนเส้นทางได้ พฤติกรรมมาตรฐานคือพิมพ์บนหน้าจอ ในการเปลี่ยนเส้นทางคุณใช้>grep -v help filename > outputFileName
ไพพ์

ขอบคุณฉันจะลองนี้แน่นอน!
มะนาว

grep> ทำงานทุกวันตลอดสัปดาห์เพื่อค้นหาลำดับตัวอักษร
kwikness

13

คุณสามารถทำได้โดยใช้ sed: sed '/help/ d' < inputFile > outputFile


4
@CengizFrostclaw: ที่บรรทัดคำสั่งบน Linux / Mac / อะไรก็ตาม หากคุณใช้ Windows คุณต้องติดตั้งอย่าง CygWin และใช้งาน
Tikhon Jelvis

ขอบคุณ @TikhonJelvis! และหนึ่งคำถามสุดท้ายเราสามารถทำ 'ความช่วยเหลือ /' เพื่อลบบรรทัดทั้งหมดที่เริ่มต้น (ไม่มี) ด้วยความช่วยเหลือได้หรือไม่
jeff

3
@CengizFrostclaw: ฉันคิดว่าsed '/^help/ d'ควรจะทำงาน ^หมายถึงการเริ่มต้นของบรรทัด
Tikhon Jelvis

@jeff PowerShell มีsedและgrep
Ooker

cygwin อาจไม่ทำงานบน windows ที่มีไฟล์ utf-16 โปรแกรมอรรถประโยชน์ Cygwin ใช้ UFT-8 ตามค่าเริ่มต้น มีน้อยมากที่รองรับ UTF-16 ใช้ babun babun.github.io มันทำหน้าที่เป็นเสื้อคลุมรอบ cygwin แต่ให้สิ่งมากมายออกจากกล่อง
Sahil Singh


6

หากคุณบน Windowsfindstrลอง ไม่จำเป็นต้องใช้เครื่องมือของบุคคลที่สาม:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

รองรับ regex ด้วย! เพียงอ่านความช่วยเหลือของเครื่องมือfindstr /?แค่อ่านความช่วยเหลือของเครื่องมือ

ป.ล. ถ้าคุณต้องการทำงานกับตัวใหญ่ตัวใหญ่ไฟล์ (เช่นไฟล์บันทึก 400 MB) ตัวแก้ไขข้อความไม่ได้มีประสิทธิภาพด้านหน่วยความจำมากนักเนื่องจากมีคนชี้ให้เห็นแล้วเครื่องมือบรรทัดคำสั่งเป็นวิธีที่จะไป แต่ไม่มี grep บน Windows ดังนั้น ...

ฉันใช้ไฟล์ล็อกขนาด 1 GB และใช้เวลา 3 วินาที

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