ลบบรรทัดทั้งหมดใน Notepad ++ ยกเว้นบรรทัดที่มีคำที่ฉันต้องการ


201

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

ฉันจะทำมันได้อย่างไร


ที่เกี่ยวข้อง: stackoverflow.com/questions/8264391/…
Cees Timmerman

1
ปลั๊กอิน LineFilter2 นั้นใช้งานง่าย
Karsten

คำตอบ:


292

มีวิธีง่ายๆในการบรรลุเป้าหมายนี้ คุณต้องดำเนินการ 3 ขั้นตอน

  1. ไปที่เมนูค้นหา> ค้นหา ... > เลือกแท็บ "ทำเครื่องหมาย" เปิดใช้งานนิพจน์ทั่วไป ค้นหา^<Path>( ^สำหรับการเริ่มบรรทัด) อย่าลืมตรวจสอบ "เส้นคั่นหน้า" และกด "ทำเครื่องหมายทั้งหมด"

    ==> แถวทั้งหมดที่คุณต้องการเก็บบุ๊กมาร์กไว้

  2. ไปที่เมนู "ค้นหา - คั่นหน้า - ย้อนกลับคั่นหน้า"

    ==> ทุกบรรทัดที่คุณต้องการลบจะถูกคั่นไว้

  3. ไปที่เมนู "ค้นหา - คั่นหน้า - ลบบรรทัดที่คั่นไว้"

    ==> บรรทัดที่คั่นไว้ทั้งหมดจะถูกลบ


47
+1 ดีไม่รู้เรื่องนี้ นอกจากนี้ยังมีตัวเลือก "ลบบรรทัดที่ไม่ได้ทำเครื่องหมาย" หรือ "ตัด / คัดลอกบรรทัดที่ทำเครื่องหมาย" ซึ่งสามารถประหยัดเวลาได้
deizel

6
ฉันมีปัญหาในตอนแรกเพราะรุ่น Notepad 6.2.3 ของฉันไม่มีรายการเมนูชื่อ "Mark Tab" คุณต้องไปที่ "ค้นหา" -> "ค้นหา ... " -> คลิกที่แท็บ "ทำเครื่องหมาย" และคุณไม่ต้องกลับมาคั่นหน้าหนังสืออีกต่อไป Notepad ++ ตอนนี้มี "ลบเส้นที่ไม่ได้ทำเครื่องหมาย" แต่เคล็ดลับของคุณช่วยฉันได้มาก! ขอบคุณ!
aakoch

22
คุณสามารถข้ามขั้นตอนที่ 2 ได้เนื่องจากเป็นไปได้ (อย่างน้อยตั้งแต่ v6.4.5) เพื่อเลือก "ลบเส้นที่ไม่ได้ทำเครื่องหมาย"
Julian

4
ฉันใช้ Notepad ++ มานานและฉันไม่เคยรู้ว่า 'บุ๊คมาร์ค' มาก่อนอะไร น่าทึ่งว่าเครื่องมือนี้มีประสิทธิภาพเพียงใดและฉันรู้ได้น้อยเพียงใด
Danubian Sailor

คุณเป็นคนใจดี นี่เป็นอีกตัวอย่างที่น่าตกใจเกี่ยวกับวิธีทำความรู้จักกับเครื่องมือที่คุณใช้จริง
Marcello Grechi Lins

67

สามารถทำได้จริงในสองขั้นตอนตั้งแต่ 6.3 ฉันคิดว่ามันสามารถทำได้เร็วกว่าที่ฉันมี 5.9 เมื่อฉันลองครั้งแรก

ใช้โพสต์ของ stema เป็นพื้นฐานของคำตอบนี้ มีขั้นตอนน้อยกว่าหนึ่งตอนนี้ ทำเครื่องหมายบรรทัดและลบบรรทัดที่ไม่ได้ทำเครื่องหมาย เสร็จสิ้น ปฏิบัติตามคำแนะนำอย่างละเอียด

  1. เมนูค้นหา "ค้นหา" ในช่องโต้ตอบค้นหาคลิกแท็บ "ทำเครื่องหมาย" เปิดใช้งานนิพจน์ทั่วไป ค้นหา^<Path>( ^สำหรับการเริ่มบรรทัด) อย่าลืมตรวจสอบ "เส้นคั่นหน้า" และกด "ทำเครื่องหมายทั้งหมด"

    ==> แถวทั้งหมดที่คุณต้องการเก็บไว้ในขณะนี้มีบุ๊คมาร์ค

  2. เมนูค้นหา -> ที่คั่นหน้า -> ลบเส้นที่ไม่มีเครื่องหมาย

    ==> ทั้งหมดNONสายบุ๊คมาร์คจะถูกลบออก


3
สิ่งนี้ใช้เวลา 10 วินาทีในขณะที่โซลูชันอื่นใช้เวลา> 20 วินาที ขอบคุณ!
Black

ฉันไม่จำเป็นต้องเพิ่มคำ^ในการค้นหาหรือใช้นิพจน์ทั่วไป หวังว่านี่จะช่วยใครซักคน
sa_leinad

29

Clean regex ทางออกเดียวเท่านั้น

ตัวแปรสองขั้นตอน

  1. แทนที่ regex

    (?!^.*test.*$)^.+
    

    แทนที่การทดสอบด้วยข้อความที่คุณร้องขอ

  2. แทนที่

    [\r\n]{2,}
    

    กับ \r\n

ตัวแปรขั้นตอนเดียว

ใช้^(?!<Path>).*\r\nเพื่อแทนที่การจับคู่ด้วยสตริงว่าง ^(?!.*?test).*\r\nรุ่นทั่วไปจะเป็น นี่จะไม่ลบบรรทัดว่างที่ท้ายไฟล์ บรรทัดอื่นทั้งหมดจะถูกลบออกรวมถึงบรรทัดว่างต่อเนื่องหลายรายการ

คำอธิบาย:

  1. (?!)เป็นการมองในแง่ลบ ^.*test.*$ เลือกทั้งบรรทัดที่มีข้อความที่ร้องขอ

  2. [\r\n]{2,}ตรงกับสิ่ง\r\nที่เกิดขึ้นมากกว่านี้เมื่อเป็น Windows New line หากคุณมี Linux หรือระบบปฏิบัติการอื่นคุณอาจต้องยุ่งกับสิ่งนี้ ที่สองคือการแทนที่ด้วยหนึ่งบรรทัดกลับ


1
หมายเหตุถึงประชาชน: บางครั้ง regex ที่ส่วนท้ายของบรรทัด (EOL) "ไม่ทำงาน" \r\nEOL กล่าวถึงในการโพสต์เป็นสิ่งที่ Windows ใช้และดังนั้นจึงอาจจะหรืออาจจะไม่สิ่งที่คุณกำลังมองหา บ่อยครั้งในสภาพแวดล้อม Linux เป็นเพียง\nหรือในสภาพแวดล้อม Mac เพียง\rดังนั้นถ้าคุณดึงไฟล์จากทั้งสองมันจะไม่เป็นสไตล์ Windows EOL แต่ถ้าคุณดาวน์โหลดผ่าน FileZilla และโหมด ASCII เรียกมันอาจจะเปลี่ยนพวกเขากลับมาใน Windows EOL (ชอบ\nเข้า\r\n) ดังนั้นหาก regex ไม่ทำงานให้ตรวจสอบสไตล์ EOL โดยไปที่ "ดู> แสดงสัญลักษณ์> แสดงจุดสิ้นสุดของบรรทัด" CR \r= LF \n=
dhaupin

5

สำหรับฉันแล้วดูเหมือนว่าวิธีที่ง่ายที่สุดคือเพียงใช้คุณลักษณะ "ค้นหาทั้งหมดในเอกสารปัจจุบัน" จากนั้นคัดลอกผลลัพธ์ลงในไฟล์ใหม่หรือเลือกทั้งหมดและแทนที่ในไฟล์ปัจจุบัน

นี่จะค้นหาบรรทัดทั้งหมดที่มีข้อความของคุณและแสดงไว้ที่ด้านล่าง เพียงคลิกขวาที่ผลการค้นหาและคัดลอก / วาง


\tLine [\d]*: คุณไม่ต้องเอาหมายเลขบรรทัดโดยการแทนที่ ยังคงเป็นคำตอบที่ดี
Noumenon

สิ่งนี้จะไม่ทำงานกับบรรทัดที่มีขนาดกว้างจน Notepad ++ ตัดปลายในหน้าต่างผลลัพธ์การค้นหา
MasterJoe2

4

ไปที่เมนูค้นหา -> ค้นหา ... -> เปิดใช้งานนิพจน์ทั่วไป ค้นหา "^ Path " (^ ใช้สำหรับการเริ่มต้นบรรทัด)

คลิกที่ปุ่ม "ค้นหาทั้งหมดในเอกสารปัจจุบัน"

หน้าต่าง "ค้นหาผลลัพธ์" จะปรากฏพร้อมทุกบรรทัดที่มีลวดลาย เลือกคัดลอก / วางลงในแท็บใหม่ใน Notepad ++

ในแท็บใหม่นี้ไปที่: เมนูค้นหา -> แทนที่ ... -> เปิดใช้งานนิพจน์ทั่วไป

ในฟิลด์ "ค้นหาอะไร:" ใช้รูปแบบ: "Line \ d +:" เว้นช่อง "แทนที่ด้วย:" ว่างไว้

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


3

หากคุณต้องการจับคู่<Path>และไม่ใช่เส้นทางของระบบไฟล์คุณสามารถลองใช้สิ่งนี้จากบรรทัดคำสั่งโดยใช้ Perl:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

มันทำงานได้กับ Strawberry Perl บน Windows ดังนั้นควรปรับเปลี่ยนตามความเหมาะสมหากผลลัพธ์ไม่ใช่สิ่งที่คุณคาดหวัง


3

มันเงอะงะ แต่คัดลอกมันทั้งหมดลงในExcelจากนั้นใช้=IF(LEFT(A1,6)="<Path>",A1,"")และคัดลอกสูตรนั้นลงไปจนสุด จากนั้นคัดลอกกลับไปที่ Notepad ++ มันไม่เหมาะ แต่ก็ค่อนข้างง่าย (ถ้าคุณมี Excel) คำเตือน: มันจะทำงานได้ไม่ดีกับเส้นที่เยื้อง (Excel จะเลื่อนคอลัมน์ ฯลฯ )


เมื่อมีหลายวิธีในการจัดการงานนี้โดยตรงทำไมคุณต้องการคัดลอกลงในแอปพลิเคชันอื่นดำเนินการที่นั่นและโอนกลับ?
Baldrickk

1

ไม่มีวิธีง่ายๆในการทำสิ่งที่คุณต้องการด้วย Notepad ++ คุณจะต้องดาวน์โหลดโปรแกรมไปยังคอมพิวเตอร์ของคุณหรือเขียนสคริปต์บางอย่างใน VB (ฉันถือว่าคุณใช้ Windows)

คุณสามารถทำสิ่งที่คุณต้องการด้วยวิธีใดวิธีหนึ่งจากสองวิธี ยูทิลิตี้ sed เป็นที่ชื่นชอบใน * ระวังและสามารถพบได้สำหรับ Windows จากคนที่ยอดเยี่ยมที่ GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ) คุณจะดาวน์โหลดโปรแกรมนี้แล้วเรียกใช้คำสั่งของคุณจากพรอมต์คำสั่ง

ลบบรรทัดทั้งหมดที่ไม่มี:
sed -i '/^<PATH>/!d' file

พิมพ์ทุกบรรทัดที่มีไฟล์ใหม่:
sed -n '/^<PATH>/p' file > newfile

ฉันแนะนำให้คุณใช้พิมพ์บรรทัดที่คุณต้องการให้เป็นไฟล์ใหม่ สาเหตุของเรื่องนี้คือคุณอาจไม่ได้รับคำสั่ง regex เป็นครั้งแรก ยูทิลิตี sed จะใช้ไวยากรณ์พื้นฐานของนิพจน์ปกติ (ดูการอ้างอิงที่http://www.regular-expressions.info/reference.html ) หากเป็นเช่นพา ธ * nix (/ var / www) คุณจะต้องหลีกเลี่ยง / อักขระเพื่อให้ regex ทำงาน

ตัวอย่าง: sed -n '/^\/var\/www/p' file > newfile
สิ่งนี้จะพิมพ์บรรทัดทั้งหมดที่ขึ้นต้นด้วย '/ var / www' หากฉันยื่นเพื่อหลีกเลี่ยง / ตัวละครแล้วคำสั่งจะมีข้อผิดพลาด คุณสามารถหลีกเลี่ยงอักขระพิเศษ (เช่น /) ด้วยอักขระเครื่องหมายทับขวา \


นี่อาจเป็นคำตอบเก่า แต่เนื่องจากจริง ๆ แล้วมี 2 คะแนน (-1 ตอนนี้จากฉัน) อยากจะแสดงความคิดเห็นไม่เพียง แต่มันผิด แต่ยังคงย้ำในการดำเนินการคำสั่งเดียวที่ฉันเพิ่งเอาเส้น> 100k ล็อกไฟล์ลงไปที่ 34 บรรทัดที่มีหนึ่งคำ (หรือวลี) ในกรณีนี้เพียงแค่ "ข้อผิดพลาด" ในภายใต้ 3 วินาทีโดยเพียงแค่วาง regex นี้ใน FIND WHAT: ^ (?!. *? error). * \ r \ n และปล่อยให้แทนที่ด้วยว่างและอย่าเลือก ". จับคู่ขึ้นบรรทัดใหม่" และคลิก "แทนที่ทั้งหมด" ใช่ฉันชอบที่จะตกตะลึงและตกใจ แต่การบอกว่า NPP ไม่สามารถทำเช่นนี้เป็นเพียงเรื่องผิด
Collin Chaffin

1

โซลูชันที่ดีขึ้นด้วยการแทนที่ regex:

(?!^.*SOMETEXT.*$)^.+\r?\n

และแทนที่ด้วยอะไร


1
ยินดีต้อนรับสู่ Super User! สนใจอธิบายเรื่องนี้สำหรับผู้ที่ไม่ทราบว่า regex แต่ละบิตทำอะไร :)
bertieb

0

ใช้ Search-> แทนที่และป้อนนิพจน์ปกติเช่นและแทนที่ทั้งหมดที่มีสตริงที่ว่างเปล่าโดยใช้^[^ ].* Regular expressionขั้นตอนต่อไปคือค้นหาบรรทัดว่างที่ค้นหาเพื่อ\n\nแทนที่ด้วยการ\nใช้Extendedหลายครั้งจนกระทั่ง0 occurrences were found.(ใช้\r\n\r\nและ\r\nขึ้นอยู่กับรูปแบบไฟล์) หากคุณมีบรรทัดว่างจำนวนมากในหนึ่งแถวมันจะเร็วกว่าที่จะใช้\n\n\n\n\n\n\nหรือมากกว่า\n: s ในสตริงการค้นหา

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