/ / TextMate зберегти результат пошуку regex в новому вікні - textmate

TextMate збереже результат пошуку regex у новому вікні - textmate

Я хотів би мати можливість виконувати пошук у TextMate, але скопіювати отримані результати у окремий файл.

Я використовую такий вираз:

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

щоб зрівняти адресу електронної пошти, вбудовану в дужки рядка тексту, так що:

A N Other (another@example.com)

Файл, з якого я працюю, має кілька сотень записів, всі розділені за допомогою CR-LF (n).

Я хотів би мати можливість витягувати лише електронну поштуфрагмент тексту, в новий файл для подальшої обробки. Проте діалогове вікно пошуку в TextMate підтримує заміну відповідного тексту. Мені було цікаво, чи є спосіб досягти цього.

Відповіді:

4 для відповіді № 1

Це дуже старе, але в TextMate2 можна виконати такі дії:

  1. Виконайте пошук регулярного виразу.
  2. Клацніть на меню передач у вікні пошуку над результатами справа.
  3. Виберіть параметр Копіювати, який посилається на потрібне. У цьому випадку "Копіювати відповідні частини".

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


2 для відповіді № 2

Команда Bundles > Text > Filtering > Copy Matching Lines into New Document може бути гарною відправною точкою. Проте вам доведеться відповідати повним рядкам, тому побудуйте регулярний вираз для розміщення (хоч і відкинути) що-небудь до і після фактичного тексту, який ви хочете витягти.


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