เป็นไปได้ไหมที่จะลบแถวที่ซ้ำกันใน Notepad ++ ออกจากการเกิดบรรทัดเดียว?
เป็นไปได้ไหมที่จะลบแถวที่ซ้ำกันใน Notepad ++ ออกจากการเกิดบรรทัดเดียว?
คำตอบ:
Notepad ++ สามารถทำสิ่งนี้ได้หากคุณต้องการจัดเรียงตามบรรทัดและลบบรรทัดที่ซ้ำกันออกในเวลาเดียวกัน
คุณจะต้องใช้ปลั๊กอิน TextFX นี้เคยถูกรวมอยู่ในรุ่นเก่าของ Notepad ++ Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install
แต่ถ้าคุณมีรุ่นที่ใหม่กว่าคุณสามารถเพิ่มได้จากเมนูได้โดยไปที่ ในบางกรณีอาจมีการเรียกใช้TextFX Characters
แต่นี่คือสิ่งเดียวกัน
TextFX -> TextFX Tools
กล่องกาเครื่องหมายและปุ่มที่จำเป็นในขณะนี้จะปรากฏในเมนูภายใต้:
ตรวจสอบให้แน่ใจว่าได้เลือก "เรียงลำดับผลลัพธ์เฉพาะที่ไม่ซ้ำกัน ... " จากนั้นเลือกบล็อกข้อความ ( Ctrl+ Aเพื่อเลือกทั้งเอกสาร) สุดท้ายคลิก "เรียงลำดับตัวพิมพ์เล็กและตัวพิมพ์ใหญ่" หรือ "เรียงลำดับตัวพิมพ์เล็กและตัวพิมพ์ใหญ่"
ตั้งแต่ Notepad ++ เวอร์ชัน 6คุณสามารถใช้ regex นี้ในการค้นหาและแทนที่การสนทนา:
^(.*?)$\s+?^(?=.*^\1$)
และแทนที่ด้วยอะไร สิ่งนี้จะละจากแถวที่ซ้ำกันทั้งหมดที่เกิดขึ้นครั้งสุดท้ายในไฟล์
ไม่จำเป็นต้องมีการเรียงลำดับสำหรับสิ่งนั้นและแถวที่ซ้ำกันสามารถอยู่ที่ใดก็ได้ในไฟล์!
คุณต้องตรวจสอบตัวเลือก "การแสดงออกปกติ" และ "การจับคู่ขึ้นบรรทัดใหม่":
^
ตรงกับจุดเริ่มต้นของบรรทัด
(.*?)
จับคู่อักขระใด ๆ 0 ตัวหรือมากกว่า แต่น้อยที่สุดเท่าที่จะเป็นไปได้ (ตรงกับแถวทุกประการนี่เป็นสิ่งจำเป็นเนื่องจากตัวเลือก ". match newline") แถวที่ตรงกันจะถูกเก็บไว้เนื่องจากมีวงเล็บอยู่รอบ ๆ และสามารถเข้าถึงได้โดยใช้\1
$
ตรงกับจุดสิ้นสุดของบรรทัด
\s+?^
ส่วนนี้จะตรงกับอักขระช่องว่างทั้งหมด (บรรทัดใหม่!) จนถึงจุดเริ่มต้นของแถวถัดไป ==> สิ่งนี้จะลบบรรทัดใหม่หลังจากแถวที่ตรงกันเพื่อให้ไม่มีแถวว่างอยู่หลังจากการแทนที่
(?=.*^\1$)
นี่คือการยืนยัน lookahead ในเชิงบวก นี่คือส่วนที่สำคัญใน regex นี้แถวจะถูกจับคู่เท่านั้น (และถูกลบออก) เมื่อมีแถวเดียวกันตรงตามที่อื่นในไฟล์
. matches newline
ทำเครื่องหมายที่เคล็ดลับ
หากแถวอยู่ติดกันคุณสามารถใช้ regex แทนที่ได้ทันที:
รูปแบบการค้นหา: ^(.*\r?\n)(\1)+
แทนที่ด้วย: \1
^(.*\r?\n)(\1)+
Notepad ++
-> แทนที่หน้าต่าง
ตรวจสอบให้แน่ใจว่าในโหมดค้นหาคุณได้เลือกแสดงออกปกติปุ่ม
หาอะไร:
^ (. *) (\ r \ n \ 1) + $
แทนที่ด้วย:
$ 1
ก่อน:
และเราคิดว่ามี
และเราคิดว่ามี
แถวเดียว
เป็นไปได้ไหมที่จะ
เป็นไปได้ไหมที่จะ
หลังจาก:
และเราคิดว่ามี
แถวเดียว
เป็นไปได้ไหมที่จะ
หากคุณไม่สนใจคำสั่งแถว (ซึ่งฉันไม่คิดว่าคุณทำ) จากนั้นคุณสามารถใช้กล่อง Linux / FreeBSD / Mac OS X / Cygwin และทำ:
$ cat yourfile | sort | uniq > yourfile_nodups
จากนั้นเปิดไฟล์อีกครั้งใน Notepad ++
'cat' is not recognized as an internal or external command, operable program or batch file.
cat yourfile | sort -Unique
Notepad ++ รุ่นหลังดูเหมือนจะไม่รวมปลั๊กอิน TextFX เลย เพื่อที่จะใช้ปลั๊กอินสำหรับการเรียงลำดับ / กำจัดรายการที่ซ้ำกันปลั๊กอินจะต้องดาวน์โหลดและติดตั้ง (เกี่ยวข้องมากกว่า) หรือเพิ่มโดยใช้ตัวจัดการปลั๊กอิน
A) วิธีที่ง่าย (ดังอธิบายไว้ที่นี่ )
ปลั๊กอิน -> ตัวจัดการปลั๊กอิน -> แสดงตัวจัดการปลั๊กอิน -> แท็บที่ใช้ได้ -> ตัวอักษร TextFX -> ติดตั้ง
B) วิธีที่เกี่ยวข้องมากกว่านี้หากจำเป็นต้องมีรุ่นอื่นหรือวิธีที่ง่ายไม่ทำงาน
ดาวน์โหลดปลั๊กอินจาก SourceForge:
เปิดไฟล์ zip และแตกNppTextFX.dll
สถานที่NppTextFX.dllใน Notepad ++ ปลั๊กอินไดเรกทอรีเช่น:
C: \ Program Files \ Notepad ++ \ ปลั๊กอิน
เริ่ม Notepad ++ และ TextFX จะเป็นหนึ่งในรายการเมนูไฟล์ (ดังที่เห็นในคำตอบ # 1 ข้างต้นโดย Colin Pickard)
หลังจากติดตั้งปลั๊กอิน TextFX ทำตามคำแนะนำในคำตอบ # 1 เพื่อเรียงลำดับและลบรายการที่ซ้ำกัน
นอกจากนี้ให้ลองตั้งค่าแป้นพิมพ์ลัดโดยใช้การตั้งค่า> ตัวทำแผนที่ชอร์คัตหากคุณใช้คำสั่งนี้บ่อยครั้งหรือต้องการจำลองแป้นพิมพ์ลัดเช่น F9 ใน TextPad เพื่อเรียงลำดับ
C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX
ควรจะเพิ่ม นอกเหนือจากนี้ยังใช้งานได้ดี
ในเวอร์ชัน 7.8 คุณสามารถทำสิ่งนี้ได้โดยไม่ต้องใช้ปลั๊กอิน - แก้ไข -> การทำงานของสาย -> ลบบรรทัดที่ซ้ำกันติดต่อกัน คุณจะต้องเรียงลำดับไฟล์เพื่อวางบรรทัดที่ซ้ำกันตามลำดับก่อนที่จะใช้งานได้ แต่มันจะทำงานเหมือนมีเสน่ห์
ตัวเลือกการเรียงลำดับจะอยู่ภายใต้การแก้ไข -> การทำงานของสาย -> เรียงลำดับตาม ...
คุณอาจต้องใช้ปลั๊กอินในการทำเช่นนี้ คุณสามารถลองบรรทัดคำสั่งcc.ddl
(เส้นที่ซ้ำกันลบ) ของConyEdit มันเป็นปลั๊กอินตัวแก้ไขข้ามสำหรับโปรแกรมแก้ไขข้อความรวมถึง Notepad ++
ด้วย ConyEdit ทำงานในพื้นหลังทำตามขั้นตอนด้านล่าง:
cc.ddl
ที่ท้ายข้อความ ค้นหานิพจน์ทั่วไป: \b(\w+)\b([\w\W]*)\b\1\b
แทนที่ด้วย: $1$2
กดปุ่มแทนที่จนกว่าจะไม่มีการจับคู่อีกต่อไปสำหรับการแสดงออกปกติในไฟล์ของคุณ
ไม่มีใครทำงานให้ฉัน
ทางออกคือ:
แทนที่
^(.*)\s+(\r?\n\1\s+)+$
กับ
\1
^(.*)\s+(\r?\n\1\s+)+$
ไม่^(.*)\s*(\r?\n\1\s*)+$
?
ขณะนี้ตัวจัดการปลั๊กอินไม่พร้อมใช้งาน (ไม่ได้มาพร้อมกับการแจกจ่าย) สำหรับ Notepad ++ คุณต้องติดตั้งด้วยตนเอง ( https://github.com/bruderstein/nppPluginManager/releases ) และแม้ว่าคุณจะทำเช่นนั้นปลั๊กอินจำนวนมากจะไม่สามารถใช้งานได้อีกต่อไป (ไม่มี TextFX) ปลั๊กอิน
อาจจะมีปลั๊กอินอื่นที่มีฟังก์ชั่นที่ต้องการ นอกเหนือจากนั้นวิธีเดียวที่จะทำได้ใน Notepad ++ คือการใช้regexพิเศษเพื่อจับคู่และแทนที่ ( Ctrl+ F→ แทนที่แท็บ)
แม้ว่าจะมีฟังก์ชั่นมากมายให้ใช้งานผ่านรายการเมนูแก้ไข (การตัด, การลบบรรทัดว่าง, การเรียงลำดับ, การแปลง EOL) ไม่มีการดำเนินการ "ที่ไม่ซ้ำ"
หากคุณมี Windows 10 แล้วคุณสามารถเปิดใช้งานการทุบตี (เพียงแค่พิมพ์อูบุนตูใน Microsoft Store และปฏิบัติตามคำแนะนำในรายละเอียดการติดตั้ง) cat your_file.txt | sort | uniq > your_file_edited.txt
และการใช้งาน แน่นอนคุณต้องอยู่ในไดเรกทอรีการทำงานเดียวกับ "your_file.txt" หรืออ้างอิงผ่านเส้นทางของมัน