Znajdź i zamień kilka różnych wartości jednocześnie


15

Mam plik z wielu wystąpień Text_1i Text1i muszę wymienić obie te struny Text_Ai TextBodpowiednio.

Obecnie wykonuję dwie funkcje Znajdź i zamień na każdym pliku, który znajduje Text_1i zastępuje go, Text_Aa drugi znajduje Text1i zastępuje go TextB.

Czy jest jakiś sposób na zrobienie tego wszystkiego naraz zamiast konieczności dwukrotnego uruchomienia „Znajdź i zamień”?

Używam Dreamweaver CS3, ale mam też Notepad ++, zwykły Notepad, OO Writer, MS Word, jeśli będą one łatwiejsze. Idealnie mógłbym to zrobić w Dreamweaver lub Notepad ++, ale jestem otwarty na pobranie czegoś innego, aby wykonać zadanie. Wolałbym nie robić żadnych rzeczy z wiersza poleceń ani tworzyć pliku wsadowego (choć jestem tego świadomy, tak naprawdę nie rozumiem).

Jeśli powyższy opis nie jest jasny, pozwól mi wyjaśnić go w ten sposób ...

Chcę uruchomić Znajdź i zamień 1 raz w 1 dokumencie i chcę, aby wykonał WSZYSTKIE następujące czynności w tym jednym wystąpieniu Znajdź i zamień:

  1. Znajdź Text_1 i Zamień zText_A
  2. Znajdź Text1 i Zamień zTextB

Ja nie próbuje zrobić Znajdź i zamień w poprzek kilka dokumentów.


Możliwe jest użycie Regexp znajdź i zamień, jeśli istnieje wyraźny wzór. W przeciwnym razie nie jest to możliwe @matt
Sathyajith Bhat

Odpowiedzi:


9

Spójrz na Sed . Możesz łatwo osiągnąć swój cel za pomocą tylko jednej linii poleceń

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


24

Od Notepad ++ 6.0 jest to faktycznie możliwe bez skryptów wykorzystujących następującą technikę:

Znajdź: Text_1 i zamień na: Text_A

Znajdź: Text2 i zamień na: TextB

Znajdź: (Text_1) | (Text2)

Zamień: (? 1Text_A) (? 2TextB)

Ogólna składnia to:

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

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

? 1 odnosi się do pierwszej przechwyconej frazy i tak dalej.

Otrzymałem to z następującej odpowiedzi: /programming//a/16104946/287101


3

Za pomocą Notepad ++ możesz albo

  • Otwórz wszystkie pliki zawierające słowa, które chcesz zastąpić, i skorzystaj z funkcji Znajdź / Zamień we wszystkich otwartych plikach

    wprowadź opis zdjęcia tutaj

  • Użyj Znajdź / Zamień w plikach

    wprowadź opis zdjęcia tutaj

  • Zapisz makro wykonujące opcje znajdowania i zamiany i odtwórz je


Nie to próbuję zrobić. Nie chcę zamieniać go na kilka plików jednocześnie, chcę zastąpić kilka ciągów w jednym pliku jednocześnie. Chcę mieć możliwość uruchomienia jednego wyszukiwania i zamiany oraz przeszukania dokumentu i zastąpienia wszystkich wystąpień Text_1 tekstem Text_A i wszystkich wystąpień Text1 tekstem TextB. Dwa osobne ciągi zastąpione dwiema osobnymi wartościami w jednym pliku.
mat.

Linki do obrazów są zepsute, czy jest jakaś szansa, aby je jakoś naprawić?
Bobby

2

Lepiej dwa razy uruchom Znajdź i zamień, ponieważ zdarzają się dwie różne zamiany. Jednak czas przetwarzania powinien być bardzo niewielki. Rozważ następujące:

Uruchamianie funkcji Znajdź i zamień raz, wyszukiwanie według terminu:

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

Do celów związanych z biegiem założymy, że jest liniowy i powiemy, że działa on w czasie O (n).

Chcesz znaleźć dwa różne terminy. Dwukrotne uruchomienie funkcji Znajdź i zamień wygląda następująco:

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

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

co zajęłoby czas O (2x1n) lub dwa razy więcej niż szukanie jednego terminu.

Wyszukiwanie dwóch terminów z dwoma zamiennikami teoretycznie wyglądałoby:

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

Uzyskanie haseł nie wymaga tak dużej mocy obliczeniowej, więc zasadniczo szukasz dwóch zestawów wyszukiwań dla każdego terminu, dając czas O (1x2n), uruchamiając się raz, ale szukając dwóch haseł.

Chociaż zaoszczędziłbyś trochę czasu, nie ładując każdego terminu dwa razy, poświęciłbyś więcej czasu na wyszukiwanie każdego terminu dwa razy, więc jest niewielki kompromis, a ponieważ ta funkcja byłaby używana rzadziej niż wyszukiwanie jednego terminu z jednym zamiennikiem, twórcy aplikacji zakładają, że nie piszą ta funkcjonalność.

WYŁĄCZENIE ODPOWIEDZIALNOŚCI DLA PROGRAMATORÓW: Jest to ogólny przykład. Wiem, że tak jest lepiej, ale próbuję pokazać, dlaczego tej funkcji nie znaleziono.


0

Obsługa wyrażeń regularnych w Notepad ++ jest poważnie ograniczona. Bez operatora naprzemiennego nie ma nawet nadziei, że zbliżysz się do tego, co chcesz zrobić. Musisz użyć sedlub edytora, który ma lepszą obsługę wyrażeń regularnych.

Powszechnie używane rozszerzenia GNU do składni wyrażeń regularnych obejmują:

  • ? operator, co oznacza zero lub jedyny w swoim rodzaju;
  • | operator alternacji („foo | bar” pasuje do „foo” lub „bar”)
  • modyfikatory takie jak / g dla chciwych lub / i dla bez rozróżniania wielkości liter;
  • {a, b}, aby oznaczać między tokenami aib typu.
  • (wzorzec) +, aby obrobić jedno lub więcej dopasowań tego samego wzoru

Składnik Scitilla, który stanowi podstawę Notepad ++, jest ściśle zgodny z POSIX i nie rozpoznaje tych rozszerzeń. Możesz skonsultować wyrażenia regularne, aby uzyskać pełne podsumowanie i kilka przykładów

Źródło

Zobacz też

GNUWin32 seddla Windows


0

Używam TextCrawler do wyszukiwania partii i zamiany. (Używam Notepad ++ do pojedynczego wyszukiwania / zamiany wielu plików, ponieważ jest szybszy niż Textcrawler.) TextCrawler obsługuje wyrażenia regularne, a także normalne wyszukiwanie / wyszukiwanie. Pliki wsadowe można zapisać i ponownie załadować do wykorzystania w przyszłości.


Proszę zobaczyć Jak mogę polecić oprogramowanie w moich odpowiedziach? W szczególności, co najmniej, powiedz, skąd wziąć oprogramowanie.
G-Man mówi „Przywróć Monikę”

Funkcja wsadowa jest dostępna tylko w niewolnej wersji Pro programu TextCrawler.
Hobbes,

0

Można to również zrobić za pomocą wtyczki ActiveX (dla Notepad ++) i wykonania skryptu niestandardowego:

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

Działa to, ale należy pamiętać, że ze względu na bieżący błąd we wtyczce ActiveX do pliku dołączany jest znak NULL przy każdym uruchomieniu skryptu.
Aidan

-1

Działa to dla wszystkich liczb (aby usunąć wszystkie liczby z tekstu / artykułu)

  1. Naciśnij Ctrl + H, aby otworzyć okno dialogowe Znajdź i zamień.

  2. W polu „Znajdź co” wpisz ^ #

  3. Pozostaw pole „Zamień na” puste.

  4. Zamień wszystko.


1
OP nie tylko chce usunąć liczby, ale chciał zastąpić je literą.
booyaa
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.