/ / TextMate zapisuje wynik wyszukiwania wyrażeń regularnych w nowym oknie - wiązanie tekstu

TextMate zapisuje wynik wyszukiwania regex do nowego okna - textmate

Chciałbym móc przeprowadzić wyszukiwanie w TextMate, ale skopiować wynikowe dopasowania do osobnego pliku.

Używam następującego wyrażenia:

(?<=()(.*?)(?=))

aby dopasować adres e-mail osadzony w nawiasach wiersza tekstu, więc coś w stylu:

A N Other (another@example.com)

Plik, z którego pracuję, ma kilkaset wpisów, wszystkie rozdzielone CR-LF (n).

Chciałbym móc wyodrębnić tylko e-mailsegment tekstu, do nowego pliku do dalszego przetwarzania. Jednak okno wyszukiwania w TextMate obsługuje tylko zastępowanie dopasowanego tekstu. Zastanawiałem się tylko, czy jest jakiś sposób, aby to osiągnąć.

Odpowiedzi:

4 dla odpowiedzi № 1

To jest bardzo stare, ale możesz wykonać następujące czynności w TextMate2:

  1. Wykonaj wyszukiwanie wyrażeń regularnych.
  2. Kliknij menu koła zębatego w polu wyszukiwania nad wynikami po prawej stronie.
  3. Wybierz opcję Kopiuj, która odnosi się do tego, co chcesz. W tym przypadku „Copy Matching Parts”.

http://manual.textmate.org/searching.html#search-results


2 dla odpowiedzi nr 2

Komenda Bundles > Text > Filtering > Copy Matching Lines into New Document może być dobrym punktem wyjścia. Musisz jednak dopasować pełne wiersze, więc skonstruuj wyrażenie regularne, aby pomieścić (chociaż odrzucić) wszystko przed i po rzeczywistym tekście, który chcesz wyodrębnić.


-1 dla odpowiedzi nr 3

O ile wiem, TextMate nie może zrobić tego, co tychcesz osiągnąć. Jednakże, jak już wspomniałeś, chcesz przetworzyć plik, tzn. Powinieneś napisać prosty skrypt, który to zrobi. Jeśli bardzo często parsujesz takie pliki, warto napisać polecenie TextMate (Bundles> Bundle Editor> Show Bundle Editor> New Command). Jeśli jest to jednorazowa czynność, prawdopodobnie lepiej zrobić wszystko z linii poleceń, tj. Użyć grep, sed i awk (jeśli to konieczne), aby przetworzyć plik i wypisać go na inny. Lub użyj wybranego języka skryptowego. W Ruby wyglądałoby to jak coś

matches =[]
File.open(ARGV.first, "r") do |file|
while line = file.gets
match = file.match(/your_regular_expression_with_grouping/)
matches << match unless match.nil?
end
end
# write out matches which are saved in matches as follows:
# matches[i][0] contains original line of text,
# matches[i][1] result of first grouping,
# matches[i][2] result of second grouping, ...