วิธีการลบบรรทัดทั้งหมดที่มีอักขระที่ไม่ใช่ ASCII ใด ๆ โดยใช้ Notepad ++ หรือ Emeditor


2

ฉันจะลบบรรทัดทั้งหมดที่มีอักขระแป้นพิมพ์ที่ไม่ใช่ ASCII ได้อย่างไร

ฉันลองใช้รหัสนิพจน์ทั่วไปหลายครั้ง แต่ไม่ควรทำเช่นนี้ฉันควรลองใช้รหัสนี้[^\x00-\x7F]+แต่ไม่ได้เลือกอักขระทั้งหมด

ความคิดที่อยู่ในใจของฉันคือการใช้วิธีนี้[^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]แต่ก็ยังใช้งานไม่ได้เพราะตัวละครบางตัวไม่ได้ถูกคัดออก\ / | { } [ ] $ # ^ ( )

  1. หากบรรทัดมีอักขระใด ๆ ที่ไม่อยู่ในรายการด้านล่างฉันต้องการลบออกหรือคั่นหน้ามัน

    0123456789`~!@#$%^&*()-_=+[]{}\/|;:'"<>,.?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
  2. ตัวอย่างง่ายๆ: มีตัวละครเพิ่มขึ้นเช่นนี้ที่นี่: https://en.wikipedia.org/wiki/List_of_Unicode_characters

    0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ¤©ª«¬¯°±²³´µ¶·¸¹º»¼½¾¿÷ÆIJŒœƔƕƋƕ
    ƜƝƢƸƾDžNJNjǽǾǼɁɀȾɎʒəɼʰʲʱʴʳʵʶʷʸˁˀˇˆ˟ˠ
    ˩˧Ͱͱͳʹͼͻͺ͵ͿΏΔΘΞΛΣΠΦΧΨΩΪΫάέήίΰαβδε
    θηκλμξπςρφχψωϊϋϏώϑϐϓϒϔϕϖϠϟϞϝϜϡϢ
    ϤϣϧϫϬϮϯϰϱ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲
    ₳₴₵₶₷₸₹₺₻₼₽₾₿⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜
    ⅝⅞⅟℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯ⇀⇁ↀↁↂↃↄ
    ⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⅀⅁⅂⅃⅄ⅅ
    ⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏ⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽ
    
  3. ผลลัพธ์ที่คาดหวัง:

    0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    

[^\x00-\x7F]+ทำงานได้ดีสำหรับฉันใน Notepad ++ มันให้ผลลัพธ์ที่คาดหวัง Npp รุ่นของคุณคืออะไร (ที่นี่ฉันมี7.5.1) คุณตรวจสอบRegular expressionไหม
โตโต้

อักขระที่เป็นส่วนหนึ่งของนิพจน์ทั่วไป (เช่น [,], (,), #, ^) ต้องถูกหลีกเลี่ยง ใน Notepad ++ คุณมักจะทำสิ่งนี้โดยนำหน้าด้วยแบ็กสแลช ดังนั้น[^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]จะกลายเป็น[\^a-z0-9``~!@\#\$%^&*\(\)-_=+\[\]{}\|;:'"<>,./?](ทางตะวันออก)
เซท

@Seth: เครื่องหมายรูปหมวก^ในตำแหน่งแรกของคลาสอักขระหมายถึงการปฏิเสธถ้าคุณหลบหนีมันหมายความว่า ... เครื่องหมายรูปหมวกยังวงเล็บ, ไปป์และตัวละครอื่น ๆ ไม่จำเป็นต้องหลบหนี แต่เส้นประ-จะต้องหลบหนีตามที่มัน หมายถึงช่วงของตัวละคร
โตโต้

@Toto จุดที่ดีเกี่ยวกับคาเร็ตชั้นนำ แต่คุณต้องหลบหนีผู้อื่นถ้าคุณต้องการจับคู่พวกเขาอย่างแท้จริง นี่อาจเป็นพิเศษสำหรับ Notepad ++ แต่ด้วย "ตัวอย่างง่ายๆ" ข้างต้นจะไม่ทำงานหากคุณไม่หลบหนี
เซท

คำตอบ:


2

[^\x00-\x7F]ทำงานได้ดี แต่ถ้าคุณต้องการที่จะใช้ตัวละครคลาสยาวเช่น[^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]คุณจะต้องหลบหนีตัวอักษรที่มีความหมายพิเศษ (เช่น. -[]\และเพิ่ม LINEBREAK ,\r\n

regex ของคุณกลายเป็น:

 [^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]
 #                    ^    ^ ^   ^            ^^^^

  • Ctrl+H
  • ค้นหาสิ่งที่: [^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]+$ แต่อีกครั้ง[^\x00-\x7F]ทำงานได้ดีและสามารถอ่านได้มากขึ้น
  • แทนที่ด้วย: LEAVE EMPTY
  • ตรวจสอบล้อมรอบ
  • ตรวจสอบการแสดงออกปกติ
  • Replace all

ตัวอย่างผลลัพธ์ที่ได้รับ:

0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Toto ขอบคุณมากคุณมักจะให้คำตอบที่ดีและเป็นประโยชน์และตรงกับสิ่งที่คำถามพูดคุยเกี่ยวกับขอบคุณและ btw ฉันรู้ [^ \ x00- \ x7F] ทำงานได้ดี แต่ไม่ใช่กับอักขระพิเศษทุกตัว แต่รหัสแรกที่คุณช่วยฉัน ออกไปเพื่อรักษาสิ่งที่ฉันต้องการเท่านั้นขอบคุณที่มีประโยชน์มากมาย
DeathRival

0

หากคุณไม่เชื่อเรื่องพระเจ้าเพื่อแก้ปัญหาและไม่ได้จับจ้องไปที่ Notepad ++ คุณสามารถติดตั้งทุบตีสำหรับ Win 10 ที่ผมแสดงให้เห็นที่นี่https://superuser.com/a/1252271/715210 (ขออภัยฉันมักจะกลับมาที่คำถามของคุณด้วยวิธีการแก้ปัญหาลินุกซ์; ))

ฉันจะมีทางออกที่คุณโชคไม่ดีที่จะหลวมเครื่องหมายวรรคตอน '

  1. bash เปิดสำหรับ Windows บนเมนูเริ่มต้น
  2. ไปที่โฟลเดอร์ที่ไฟล์ของคุณอยู่cd /mnt/c/path/folder(ไดรฟ์ C: เปิด / mnt / c)
  3. หากไฟล์ของคุณชื่อfoo.txt คุณสามารถสร้างไฟล์bar.txtด้วยคำสั่งนี้:

    cat foo.txt | tr -cd '[:alnum:]\n\r~!@#$%^&*()-_=+{}\|;:<>,./?"`' | sed '/^$/d' > bar.txt

คำอธิบายของชิ้นส่วน:

cat foo.txtส่งออกไฟล์ข้อความและด้วยไปป์|เอาท์พุทจะถูกเปลี่ยนเส้นทางไปยัง commande tr -cdซึ่งจะลบถ่านทุกตัวที่ไม่ได้อยู่ในรายการหลังจาก betwenn '...'. Followed by a pipe tosed to remove the empty lines. Last but not least with> bar.txt `เราจะเปลี่ยนเส้นทางไปยังไฟล์bar.txt

ขอบคุณที่:


ฉันใช้เฉพาะ windows 7 และฉันไม่มีตัวเลือกให้ใช้ windows อื่นเฉพาะ windows 2012 ที่ฉันสามารถใช้ได้เช่นกัน
DeathRival

ตกลงขออภัยที่ฉันไม่สามารถช่วยคุณได้ หากคุณมีสิทธิ์เข้าถึงคอมพิวเตอร์ของคุณและคุณมีความเป็นไปได้ที่จะเปลี่ยนลำดับการบู๊ตคุณสามารถสร้างแท่ง USB ด้วย Ubuntu สดและเรียกใช้คำสั่งนั้นได้ ดูที่กวดวิชาtutorials.ubuntu.com/tutorial/…
chloesoe

0

ใน Notepad ++ นี่เป็นเรื่องง่าย:

  1. ค้นหาเมนู> ทำเครื่องหมาย ...

  2. ค้นหาสิ่งที่: [^\x00-\x7F]
    ☑ทำเครื่องหมายบรรทัด
    (•) นิพจน์ทั่วไป

  3. กดค้นหาทั้งหมด

  4. เมนูค้นหา > บุ๊คมาร์ค > ลบบรรทัดที่คั่นหน้า


ขอบคุณสำหรับความพยายามในการพยายามของคุณ แต่ฉันพูดในคำถามของฉันว่ารหัส [^ \ x00- \ x7F] อย่าลบทุกอย่างที่ฉันต้องการเพราะมีอักขระพิเศษที่ไม่รู้จักรหัสนี้ไม่อ่านเลย Toto ช่วยฉันขอบคุณ พยายาม
DeathRival

@DeathRival - ไม่มีปัญหาสำหรับฉันขั้นตอนข้างต้นทั้งหมดได้ผล 100% เปลี่ยน # 2 เป็น # 3 แน่นอนคุณสามารถใช้สิ่งที่คุณทำในคำตอบที่ยอมรับได้ แต่สิ่งนี้เร็วกว่าและมีประสิทธิภาพมากกว่า (ฉันพนันว่าคุณไม่ได้ลองขั้นตอนด้านบน :)
miroxlav
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.