ค้นหาและแทนที่ค่าที่แตกต่างกันหลายค่าพร้อมกัน


15

ฉันมีไฟล์ที่มีหลายอินสแตนซ์Text_1และText1และฉันต้องการแทนที่ทั้งสองสตริงด้วยText_AและTextBตามลำดับ

ขณะนี้ฉันกำลังทำสองค้นหาและแทนที่ฟังก์ชั่นในแต่ละไฟล์หนึ่งที่พบText_1และแทนที่มันด้วยText_Aและอื่น ๆ ที่พบและแทนที่มันด้วย Text1TextB

มีวิธีการทำสิ่งนี้ทั้งหมดในครั้งเดียวแทนที่จะต้องเรียกใช้ "ค้นหาและแทนที่" สองครั้ง?

ฉันใช้ Dreamweaver CS3 แต่ฉันก็มี Notepad ++, Notepad ทั่วไป, OO Writer, MS Word ถ้ามันจะง่ายกว่านี้ เป็นการดีที่ฉันสามารถทำได้ใน Dreamweaver หรือ Notepad ++ แต่ฉันเปิดให้ดาวน์โหลดอย่างอื่นเพื่อให้งานเสร็จ ฉันไม่ต้องการที่จะทำสิ่งใด ๆ ในบรรทัดคำสั่งหรือสร้างไฟล์แบทช์ (ในขณะที่ฉันตระหนักถึงมันฉันไม่เข้าใจมันจริงๆ)

ในกรณีที่คำอธิบายข้างต้นไม่ชัดเจนให้ฉันอธิบายด้วยวิธีนี้ ...

ฉันต้องการที่จะเรียกใช้ค้นหาและแทนที่1 ครั้งใน1 เอกสารและฉันต้องการจะทำทุกอย่างต่อไปนี้ในช่วงที่หนึ่งค้นหาและแทนที่เช่น:

  1. ค้นหา Text_1และแทนที่ด้วยText_A
  2. ค้นหา Text1และแทนที่ด้วยTextB

ฉันไม่ได้พยายามค้นหาและแทนที่ในเอกสารหลายฉบับ


อาจเป็นไปได้โดยใช้ Regexp ค้นหาและแทนที่หากมีรูปแบบที่แตกต่างกัน @matt
Sathyajith Bhat

คำตอบ:


9

ลองดูที่Sed คุณสามารถบรรลุเป้าหมายได้อย่างง่ายดายด้วยบรรทัดคำสั่งเดียว

sed -e "s/Text_1/TextA/" -e "s/Text1/TextB/" <your_file.txt>your_file_new.txt


24

ตั้งแต่ Notepad ++ 6.0 เป็นจริงได้โดยไม่ต้องใช้สคริปต์โดยใช้เทคนิคต่อไปนี้:

ค้นหา: Text_1 และแทนที่ด้วย: Text_A

ค้นหา: Text2 และแทนที่ด้วย: TextB

ค้นหา: (Text_1) | (Text2)

แทนที่: (? 1Text_A) (? 2TextB)

ไวยากรณ์ทั่วไปคือ:

Find: (FindA)|(FindB)|(FindC)...

Replace: (?1ReplaceA)(?2ReplaceB)(?3ReplaceC)...

? 1 หมายถึงวลีแรกที่ถูกจับและอื่น ๆ

ฉันได้สิ่งนี้จากคำตอบต่อไปนี้: /programming//a/16104946/287101


3

การใช้ Notepad ++ คุณสามารถทำได้

  • เปิดไฟล์ทั้งหมดที่มีคำที่คุณต้องการแทนที่และใช้การค้นหา / แทนที่ในไฟล์ที่เปิดอยู่ทั้งหมด

    ป้อนคำอธิบายรูปภาพที่นี่

  • ใช้ค้นหา / แทนที่ในไฟล์

    ป้อนคำอธิบายรูปภาพที่นี่

  • บันทึกแมโครที่ทำหน้าที่ค้นหาและแทนที่ตัวเลือกแล้วเล่น


นั่นไม่ใช่สิ่งที่ฉันพยายามทำ ฉันไม่ต้องการแทนที่มันในหลายไฟล์พร้อมกันฉันต้องการแทนที่สตริงหลายไฟล์ในครั้งเดียว ฉันต้องการที่จะเรียกใช้หนึ่งค้นหาและแทนที่และให้มันค้นหาเอกสารและแทนที่อินสแตนซ์ทั้งหมดของ Text_1 ด้วย Text_A และอินสแตนซ์ทั้งหมดของ Text1 ด้วย TextB สตริงแยกสองสตริงถูกแทนที่ด้วยสองค่าที่แยกกันในไฟล์เดียว
แมตต์

ลิงก์รูปภาพเสียหายหรือไม่โอกาสใดที่คุณสามารถแก้ไขได้
Bobby

2

คุณควรใช้การค้นหาและแทนที่สองครั้งดีกว่าเพราะคุณมีสิ่งทดแทนที่ต่างกันสองรายการเกิดขึ้น อย่างไรก็ตามควรมีการแลกเปลี่ยนเวลาในการประมวลผลน้อยมาก พิจารณาสิ่งต่อไปนี้:

เรียกใช้การค้นหาและแทนที่หนึ่งครั้งค้นหาคำโดยใช้คำ:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

สำหรับวัตถุประสงค์ในการวิ่งเราจะถือว่ามันเป็นเส้นตรงและบอกว่าสิ่งนี้จะทำงานในเวลา O (n)

คุณต้องการค้นหาคำสองคำที่ต่างกัน ใช้การค้นหาและแทนที่สองครั้งดูเหมือนว่า:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Get Term
  Does term match?  If so, replace term
Get Next Term
...

ซึ่งจะใช้เวลา O (2x1n) หรือสองเท่าของการค้นหาคำหนึ่งคำ

การค้นหาคำสองคำด้วยการแทนที่สองครั้งในทางทฤษฎีจะมีลักษณะดังนี้:

Get Term
  Does first term match?  If so, replace first term
  Does second term match?  If so, replace second term
Get Next Term
...

การรับคำศัพท์นั้นไม่ได้ใช้พลังการประมวลผลมากนักดังนั้นโดยพื้นฐานแล้วคุณกำลังค้นหาสองชุดสำหรับแต่ละคำโดยให้เวลาเป็น O (1x2n) ทำงานครั้งเดียว แต่ค้นหาสองคำ

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

การปฏิเสธความรับผิดถึงโปรแกรมเมอร์:นี่คือตัวอย่างทั่วไป ฉันรู้ว่ามันดีกว่า แต่ฉันพยายามแสดงให้เห็นว่าเหตุใดจึงไม่พบคุณลักษณะดังกล่าว


0

การสนับสนุนการแสดงออกปกติใน Notepad ++ จะถูก จำกัด อย่างรุนแรง หากไม่มีผู้ดำเนินการสำรองไม่มีความหวังที่จะเข้าใกล้สิ่งที่คุณต้องการทำ คุณจะต้องใช้sedหรือแก้ไขที่มีการสนับสนุน regex ที่ดีขึ้น

ส่วนขยาย GNU ที่ใช้ทั่วไปในไวยากรณ์นิพจน์ทั่วไปประกอบด้วย:

  • ที่ ผู้ประกอบการหมายถึงศูนย์หรือหนึ่งในชนิด;
  • the | โอเปอเรเตอร์สำรอง ("foo | bar" ตรงกับ "foo" หรือ "bar" อย่างใดอย่างหนึ่ง)
  • ตัวดัดแปลงเช่น / g สำหรับโลภหรือ / i สำหรับ case insensitive;
  • {a, b} เพื่อแสดงว่าระหว่าง a และ b โทเค็นของชนิด
  • (รูปแบบ) + เพื่อควบคุมการจับคู่รูปแบบเดียวกันอย่างน้อยหนึ่งรายการ

องค์ประกอบ Scitilla ซึ่งรองรับ Notepad ++ นั้นเข้ากันได้กับ POSIX อย่างเคร่งครัดและไม่รู้จักส่วนขยายเหล่านี้ คุณสามารถปรึกษานิพจน์ปกติเพื่อดูบทสรุปที่สมบูรณ์และตัวอย่างบางส่วน

แหล่ง

ดูสิ่งนี้ด้วย

GNUWin32 sedสำหรับ Windows


0

ฉันใช้ TextCrawler เป็นชุดการค้นหาและแทนที่ (ฉันใช้ Notepad ++ สำหรับการค้นหาเดียว / แทนที่ในหลาย ๆ ไฟล์เพราะมันเร็วกว่า Textcrawler) TextCrawler รองรับการแสดงออกปกติเช่นเดียวกับการค้นหา / ค้นหาปกติ ไฟล์แบตช์สามารถบันทึกและโหลดใหม่สำหรับใช้ในอนาคต


โปรดดูฉันจะแนะนำซอฟต์แวร์ในคำตอบของฉันได้อย่างไร โดยเฉพาะอย่างน้อยที่สุดให้บอกตำแหน่งที่จะรับซอฟต์แวร์
G-Man กล่าวว่า 'Reinstate Monica'

ฟังก์ชันแบทช์มีเฉพาะใน TextCrawler รุ่น Pro ที่ไม่ใช่รุ่นฟรี
Hobbes

0

นอกจากนี้ยังสามารถทำได้โดยใช้ปลั๊กอิน ActiveX (สำหรับ Notepad ++) และรันสคริปต์ที่กำหนดเอง:

NppApplication.activeEditor.text
=NppApplication.activeEditor.text
.replace(/Text_1/g,"Text_A")
.replace(/Text1/g,"TextB")

ใช้งานได้ แต่โปรดทราบว่าเนื่องจากข้อบกพร่องในปัจจุบันใน ActiveX Plugin อักขระ NULL จะถูกผนวกเข้ากับไฟล์ทุกครั้งที่คุณเรียกใช้สคริปต์
Aidan

-1

ใช้ได้กับทุกหมายเลข (เพื่อลบหมายเลขทั้งหมดออกจากข้อความ / บทความ)

  1. กด Ctrl + H เพื่อเปิดไดอะล็อกค้นหาและแทนที่

  2. ในช่อง "ค้นหาอะไร" พิมพ์ ^ #

  3. เว้นช่อง "แทนที่ด้วย" ว่างไว้

  4. แทนที่ทั้งหมด.


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