/ / TextMate запишете резултат от търсене в regex в нов прозорец - textmate

TextMate записва резултата от търсенето на регекс в нов прозорец - textmate

Бих искал да съм в състояние да извърша търсене в TextMate, но да копирам получените съвпадения в отделен файл.

Използвам следния израз:

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

за да съответства на имейл адрес, вграден в скоби на ред от текст, така че нещо подобно на:

A N Other (another@example.com)

Файлът, от който работя, има няколко стотин записа, всички разделени от CR-LF (n).

Бих искал да мога да извличам само имейлатекст в нов файл за по-нататъшна обработка. Обаче диалоговият прозорец за търсене в TextMate изглежда само поддържа подмяна на съответстващия текст. Просто се чудех дали има някакъв начин да постигна това.

Отговори:

4 за отговор № 1

Това е супер старо, но можете да направите следното в TextMate2:

  1. Направете търсене на regex.
  2. Кликнете върху менюто с инструменти в полето за търсене над резултатите отдясно.
  3. Изберете опцията Копиране, която се отнася до това, което искате. В този случай, "Копиране на съвпадащите части".

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


2 за отговор № 2

Командата Bundles > Text > Filtering > Copy Matching Lines into New Document може да бъде добра отправна точка. Въпреки това ще трябва да съвпадате с цели линии, така че да се изгради regexp, за да се приспособи (макар и да се отхвърли) нещо преди и след действителния текст, който искате да извлечете.


-1 за отговор № 3

Доколкото знам, TextMate не може да направи това, което виеискам да постигна. Както вече споменахте обаче, искате да обработите файла си, т.е. трябва да напишете прост скрипт, който го прави. Ако трябва да анализирате такива файлове много често може да си струва да напишете команда за TextMate (Bundles> Bundle Editor> Show Bundle Editor> New Command). Ако това е еднократна дейност, вероятно е по-добре да правите всичко от командния ред, т.е. използвайте grep, sed и awk (ако е необходимо), за да обработите файла и да го изведете в друг. Или използвайте скриптовия език по ваш избор. В Ruby ще изглежда нещо подобно

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, ...