Tìm và thay thế một vài giá trị khác nhau cùng một lúc


14

Tôi có một tệp có nhiều phiên bản Text_1Text1và tôi cần thay thế cả hai chuỗi đó bằng Text_ATextBtương ứng.

Hiện tại tôi đang thực hiện hai chức năng Tìm và Thay thế trên mỗi tệp, một chức năng tìm Text_1và thay thế nó bằng Text_Achức năng khác tìm Text1và thay thế nó bằng TextB.

Có cách nào để làm tất cả việc này cùng một lúc thay vì phải chạy "Tìm và thay thế" hai lần không?

Tôi đang sử dụng Dreamweaver CS3, nhưng tôi cũng có Notepad ++, Notepad thông thường, OO Writer, MS Word nếu những thứ đó sẽ dễ dàng hơn. Lý tưởng nhất là tôi có thể làm điều này trong Dreamweaver hoặc Notepad ++ nhưng tôi sẵn sàng tải xuống một cái gì đó khác để hoàn thành công việc. Tôi không muốn phải thực hiện bất kỳ công cụ dòng lệnh hoặc tạo một tệp bó (trong khi tôi biết về nó, tôi thực sự không hiểu nó).

Trong trường hợp mô tả ở trên không rõ ràng, hãy để tôi giải thích nó theo cách này ...

Tôi muốn chạy Tìm & Thay thế 1 lần trong 1 tài liệu và tôi muốn nó thực hiện TẤT CẢ những điều sau đây trong một trường hợp Tìm & Thay thế:

  1. Tìm Text_1thay thế bằngText_A
  2. Tìm Text1thay thế bằngTextB

Tôi không cố gắng thực hiện Tìm và thay thế trên một số tài liệu.


Có thể sử dụng Regapi tìm và thay thế nếu có một mẫu riêng biệt. Khác không thể @matt
Sathyajith Bhat

Câu trả lời:


10

Hãy nhìn vào Sed . Bạn có thể dễ dàng đạt được mục tiêu của mình chỉ bằng một dòng lệnh

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


23

Vì Notepad ++ 6.0 thực sự có thể mà không cần các tập lệnh sử dụng kỹ thuật sau:

Tìm: Text_1 và Thay thế bằng: Text_A

Tìm: Text2 và Thay thế bằng: TextB

Tìm: (Văn bản_1) | (Văn bản 2)

Thay thế: (? 1Text_A) (? 2TextB)

Cú pháp chung là:

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

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

? 1 đề cập đến cụm từ bị bắt đầu tiên và như vậy.

Tôi đã nhận được điều này từ câu trả lời sau: /programming//a/16104946/287101


3

Sử dụng Notepad ++, bạn có thể

  • Mở tất cả các tệp có chứa các từ bạn muốn thay thế và sử dụng Tìm / Thay thế trong tất cả các tệp đang mở

    nhập mô tả hình ảnh ở đây

  • Sử dụng Tìm / Thay thế trong tệp

    nhập mô tả hình ảnh ở đây

  • Ghi lại một macro thực hiện các tùy chọn tìm và thay thế và phát lại


Đó không phải là điều tôi đang cố gắng làm. Tôi không muốn thay thế nó trên một số tệp cùng một lúc, tôi muốn thay thế nhiều chuỗi trong một tệp cùng một lúc. Tôi muốn có thể chạy một lần tìm và thay thế và để nó tìm kiếm tài liệu và thay thế tất cả các phiên bản của Text_1 bằng Text_A và tất cả các phiên bản của Text1 bằng TextB. Hai chuỗi riêng biệt được thay thế bằng hai giá trị riêng biệt trong một tệp.
matt

Các liên kết hình ảnh bị hỏng, bất kỳ cơ hội nào bạn có thể sửa chúng bằng cách nào đó?
Bobby

2

Tốt hơn hết là bạn nên chạy Tìm & Thay thế hai lần, vì bạn có hai lần thay thế khác nhau xảy ra. Tuy nhiên, nên có rất ít sự đánh đổi trong thời gian xử lý. Hãy xem xét những điều sau đây:

Chạy Tìm & Thay thế một lần, tìm kiếm theo thuật ngữ:

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

Đối với mục đích chạy, chúng tôi sẽ giả sử nó tuyến tính và nói rằng điều này chạy trong thời gian O (n).

Bạn muốn tìm hai thuật ngữ khác nhau. Chạy Tìm & Thay thế hai lần trông giống như:

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

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

sẽ mất thời gian O (2x1n) hoặc gấp đôi thời gian tìm kiếm một thuật ngữ.

Tìm kiếm hai thuật ngữ với hai thay thế về mặt lý thuyết sẽ giống như:

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

Nhận các thuật ngữ không mất nhiều sức mạnh xử lý, vì vậy về cơ bản, bạn đang tìm kiếm hai bộ tìm kiếm cho mỗi cụm từ, cho thời gian là O (1x2n), chạy một lần nhưng tìm kiếm hai thuật ngữ.

Mặc dù bạn sẽ tiết kiệm được một số thời gian không tải mỗi thuật ngữ hai lần, nhưng bạn sẽ dành nhiều thời gian hơn để tìm kiếm mỗi thuật ngữ hai lần, do đó, có rất ít sự đánh đổi và vì tính năng này sẽ được sử dụng ít thường xuyên hơn so với tìm kiếm một thuật ngữ với một thay thế, các nhà phát triển ứng dụng chỉ cho rằng không viết chức năng đó.

TUYÊN BỐ TỪ CHỐI TRÊN CHƯƠNG TRÌNH: Đây là một ví dụ tổng quát. Tôi biết nó tốt hơn nhưng tôi đang cố gắng chỉ ra tại sao tính năng đó không được tìm thấy.


0

Hỗ trợ biểu thức chính quy trong Notepad ++ bị hạn chế nghiêm trọng. Không có toán tử thay thế, sẽ không có hy vọng thậm chí đến gần với những gì bạn muốn làm. Bạn sẽ cần sử dụng sedhoặc một trình soạn thảo có hỗ trợ regex tốt hơn.

Các phần mở rộng GNU thường được sử dụng cho cú pháp biểu thức chính quy bao gồm:

  • các ? toán tử, có nghĩa là không hoặc một trong các loại;
  • | toán tử thay thế ("foo | bar" khớp với "foo" hoặc "bar")
  • công cụ sửa đổi như / g cho tham lam hoặc / i cho trường hợp không nhạy cảm;
  • {a, b} để biểu thị betwen a và b token của một loại.
  • (mẫu) + để mach một hoặc nhiều kết quả khớp của cùng một mẫu

Thành phần Scitilla, nền tảng của Notepad ++, hoàn toàn tương thích POSIX và không nhận ra các tiện ích mở rộng này. Bạn có thể tham khảo Biểu thức chính quy cho một danh sách hoàn chỉnh và một số ví dụ

Nguồn

Xem thêm

GNUWin32 sedcho Windows


0

Tôi sử dụng TextCrawler để tìm và thay thế hàng loạt. (Tôi sử dụng Notepad ++ cho một lần tìm kiếm / thay thế trên nhiều tệp vì nó nhanh hơn Textcrawler.) TextCrawler hỗ trợ các biểu thức thông thường cũng như tìm kiếm / tìm kiếm thông thường. Các tệp bó có thể được lưu và tải lại để sử dụng trong tương lai.


Vui lòng xem Làm thế nào để tôi giới thiệu phần mềm trong câu trả lời của tôi? Cụ thể, ở mức tối thiểu, hãy nói nơi nhận phần mềm.
G-Man nói 'Phục hồi Monica'

Hàm bó chỉ khả dụng trong phiên bản Pro không có bản quyền của TextCrawler.
Hobbes

0

Ngoài ra, nó có thể được thực hiện bằng cách sử dụng Plugin ActiveX (cho Notepad ++) và thực thi tập lệnh tùy chỉnh:

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

Điều này hoạt động, nhưng lưu ý rằng do lỗi hiện tại trong Trình cắm ActiveX, một ký tự NULL được thêm vào tệp mỗi khi bạn chạy tập lệnh.
Aidan

-1

Điều này hoạt động cho tất cả các số (để xóa tất cả các số khỏi văn bản / bài viết)

  1. Nhấn Ctrl + H để mở hộp thoại Tìm và Thay thế.

  2. Trong hộp "Tìm gì", nhập ^ #

  3. Để trống ô "Thay thế bằng".

  4. Thay thế tất cả.


1
OP không chỉ muốn xóa số, họ muốn thay thế nó bằng một chữ cái.
booyaa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.