如何通过命令行脚本 实现 ->使用sublime text的 搜索功能?

场景

我又一个大概10-20M的txt文件, 我使用 sublime text 打开,然后 使用cltr+shift+f(find in files命令) 打开搜索,输入要搜索的文本,然后点击find,搜索的结果如下:包含匹配的内容和行号。
image.png
image.png

这种搜索效果 vscode也能实现。

需求

如何 通过脚本 实现上述功能? 脚本接收输入参数 为搜索的文本, 脚本的执行结果 为 找到的匹配文本和行号。
更优化的方案: 脚本搜索支持 正则、大小写敏感等选项。

目前的参考方向

https://www.sublimetext.com/docs/command_line.html#windows
官方提供了一个 Command Line Interface
image.png

比如 打开指定的文件,并指定find_all这个commnad

D:\tempFiles>subl  index.html

文档中提到 --command <command>: Run the given command 不知道具体有哪些command,以及如何使用

阅读 1.2k
avatarAI BotBETA

要通过命令行脚本使用Sublime Text的搜索功能并获取结果,你不能直接使用Sublime Text的命令行接口(CLI)来完成,因为Sublime Text的CLI并不直接支持输出搜索结果的文本格式。但是,你可以通过其他命令行工具,如grep(在Unix-like系统上)或findstr(在Windows上),结合Sublime Text来实现这个需求。

以下是使用grep(在Unix-like系统上,如Linux或macOS)的示例步骤:

  1. 不使用Sublime Text:使用grep命令搜索文件。
  2. (可选):将grep的输出格式化为Sublime Text可以接受的格式,然后导入到Sublime Text中查看。

但是,既然你想要直接得到搜索结果的文本输出,那么grep(或findstr)就足够了。

在Unix-like系统上使用grep

grep -n '搜索文本' 文件名.txt

其中:

  • -n 选项告诉grep显示匹配行的行号。
  • '搜索文本' 是你想要搜索的文本。
  • 文件名.txt 是你想要搜索的文件名。

在Windows上使用findstr

findstr /N "搜索文本" 文件名.txt

其中:

  • /N 选项告诉findstr显示匹配行的行号。
  • "搜索文本" 是你想要搜索的文本。
  • 文件名.txt 是你想要搜索的文件名。

支持正则、大小写敏感等选项

  • 对于grep,你可以使用-E来启用扩展正则表达式,使用-i来忽略大小写。
  • 对于findstr,你可以使用/R来启用正则表达式,但它没有直接忽略大小写的选项。你可以通过搜索[sS](其中s代表小写,S代表大写)来模拟大小写不敏感。

脚本示例(Bash)

你可以创建一个Bash脚本来接收搜索文本和文件名作为参数:

#!/bin/bash

SEARCH_TEXT="$1"
FILE_NAME="$2"

grep -n "$SEARCH_TEXT" "$FILE_NAME"

保存为search_in_file.sh,然后通过chmod +x search_in_file.sh使其可执行,然后运行./search_in_file.sh '搜索文本' 文件名.txt

2 个回答
// deno run -A search.ts input/index.html div
import { readLines } from "https://deno.land/std/io/mod.ts";

async function searchFile(filePath: string, keyword: string) {
    let lineNumber = 0;
    const file = await Deno.open(filePath);

    for await (const line of readLines(file)) {
        lineNumber++;
        if (line.includes(keyword)) {
            console.log(`${lineNumber}: ${line}`);
        }
    }

    file.close();
}

const [filePath, keyword] = Deno.args;

if (!filePath || !keyword) {
    console.error("Usage: deno run searchFile.ts <file-path> <keyword>");
    Deno.exit(1);
}

await searchFile(filePath, keyword);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏