【问题标题】:TextMate save result of regex search into new windowTextMate 将正则表达式搜索的结果保存到新窗口中
【发布时间】:2010-11-10 16:05:04
【问题描述】:

我希望能够在 TextMate 中执行搜索,但将结果匹配复制到单独的文件中。

我正在使用以下表达式:

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

匹配嵌入在一行文本括号中的电子邮件地址,例如:

A N Other (another@example.com)

我正在处理的文件有几百个条目,全部由 CR-LF (\n) 分隔。

我希望能够仅将文本的电子邮件部分提取到一个新文件中以进行进一步处理。但是,TextMate 中的搜索对话框似乎只支持替换匹配的文本。我只是想知道是否有某种方法可以做到这一点。

【问题讨论】:

    标签: textmate


    【解决方案1】:

    这是超级旧的,但您可以在 TextMate2 中执行以下操作:

    1. 进行正则表达式搜索。
    2. 点击右侧结果上方搜索框中的齿轮菜单。
    3. 选择您想要的复制选项。在这种情况下,“复制匹配的部分”。

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

    【讨论】:

      【解决方案2】:

      命令Bundles > Text > Filtering > Copy Matching Lines into New Document 可能是一个很好的起点。不过,您必须匹配整行,因此请构建一个正则表达式来容纳(尽管丢弃)您要提取的实际文本之前和之后的任何内容。

      【讨论】:

      • 哇,不知道这个功能!!谢谢!!
      【解决方案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, ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-28
        • 1970-01-01
        • 2022-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多