Zastosuj wyrażenie regularne do niektórych wystąpień


4

Mam duży plik z zwykłym tekstem (bez tagów HTML itp.). Chcę z jednej strony zastosować wyrażenie regularne do całego pliku, ale z drugiej strony chcę wybrać, które zmiany zostaną zastosowane.

Na przykład, jeśli mam wyrażenie regularne, takie jak / house / -> home, chcę zobaczyć podgląd i zdecydować, które wystąpienia zostaną zastosowane, np. pierwszy i trzeci.

Potrzebuję edytora, który wyświetla nie tylko podgląd zmian (coś w rodzaju edytora powergrep (powergrep.com)), ale pozwala mi wybrać, które zmiany zastosować. Dam ci krótki przykład. Chcę zmienić słowo Alicja w całej książce „Alicja w krainie czarów”, z wyjątkiem pierwszego wystąpienia na stronie 55. Jasne, że mogę wszystko zamienić, a następnie zmienić to jedno słowo na stronie 55, ale nie tego chcę.

Odpowiedzi:


2

Cóż, jeśli nie masz nic przeciwko vim, możesz przeprowadzić interaktywne wyszukiwanie i zastąpić je w ten sposób

:%s/house/home/gc

Spowoduje to wyświetlenie monitu przed zastosowaniem podstawienia wyrażenia regularnego do każdego wystąpienia.


1

NetBeans IDE ma tę funkcjonalność - regex zastąpić z podglądem. Chociaż używanie tak ciężkiej rzeczy wydaje się trochę przesadne ...

Aktualizacja

Funkcjonalność nazywa się Zamień w projektach . Przejdź do Edycja -> Zamień w projektach lub naciśnij CTRL + SHIFT + H.
Zastąp w widoku projektów
Wybierz Przeglądaj w sekcji Zakres - pozwoli ci przeglądać pliki, które chcesz. Teraz naciśnij Znajdź. Dostaniesz podgląd:
Zamień podgląd
Wybierz które wystąpień zastąpić i wciśnij Zastąp X mecze .


Tak, możesz użyć wyrażenia regularnego z podglądem (podświetlanie wyników), ale możesz tylko zamienić lub zamienić wszystkie. Nie możesz wybrać zamiennika, który chcesz wykonać. Tak jak powiedziałem przedtem. Nie jest to problemem w 10 zmianach, gdy musisz kliknąć 10 razy. W przypadku 1000 zmian ma to znaczenie.
piotr.gradzinski

1
@dlm w ostatnich wersjach Netbeansa możesz wybrać, które zdarzenia mają zostać zastąpione. Używam Netbeans do programowania i jest to jedna z funkcji, które ułatwiają mi życie ..
Shimon Rachlenko

Dziękuję Ci. Czy możesz opisać, jak to zrobić? Jak wybrać miejsce, które chcesz zastąpić? Korzystasz z przycisków Next / Prev? Przydałyby się niektóre zrzuty ekranu.
piotr.gradzinski

Zaktualizowałem odpowiedź z instrukcjami, jak to zrobić. Mam nadzieję, że to pomoże ..
Shimon Rachlenko

0

Jeśli nie czujesz się dobrze z vimem ;), możesz wypróbować na przykład TED Notepad (mój ulubiony, schludny, ale wiele funkcji), Notatnik programisty (oba dla Windows) lub kate(Linux / KDE). Jednak nie sądzę, że jest podgląd zmian ...


Cóż, właściwie to samo mogę zrobić w Eclipse, Notatniku ++ lub czymkolwiek. Musisz zastąpić klawiszem Enter. Jeśli masz 10 000 wystąpień, jest to pewien problem. Jeśli pamiętamy, że chcemy zrobić pierwsze 5 000 podstawień ignorując 5 001, a następnie zrobić 4 999 następnych, więc miło by było odznaczyć tę podstawienie, a następnie nacisnąć „zamień wszystko”. Podgląd i odznaczanie niechcianych podstawień jest kluczowe.
piotr.gradzinski

Ok, nie było to dla mnie jasne z twojego pytania, być może powinieneś wyjaśnić tę kwestię, ponieważ nie możesz brać za pewnik, że wszyscy znają ten powergrep. (Btw. Dlaczego nie użyjesz tego edytora, jeśli spełnia on twoje potrzeby?) I proszę wyjaśnij, czy szukasz rozwiązania z Win, Un * x itp.
mpy

Jestem bardzo sory, to mój błąd. Powergrep robi wiele rzeczy (np. Podgląd zastępowania wyrażeń regularnych), ale nie pozwala mi wybrać, które wystąpienie należy wymienić, a które nie. Zredagowałem moje pytanie.
piotr.gradzinski

Szukam rozwiązania dla systemu Windows lub Linux.
piotr.gradzinski

0

Obowiązkowa wtyczka emacs: W emacs (lub xemacs, osobisty faworyt) możesz uruchomić query-replace-regexp, który poprosi o wyrażenie regularne i zamianę oraz pyta o każdą instancję. Ograniczone M-C-%domyślnie tutaj. Jest też przyzwoita wersja xemacs dla Windows.

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.