求助:使用正则表达式将含指定关键词的行移至列表顶部
求助:使用正则表达式将含指定关键词的行移至列表顶部
嘿,我来帮你搞定这个需求!要把包含blue的行移到列表最顶部,用正则配合常用的文本编辑器或命令行工具就能实现,我分两种实用场景给你说:
场景1:在VS Code/Sublime这类编辑器里操作
这类编辑器支持强大的正则查找替换,按下面的步骤来就行:
- 打开要处理的文本,调出「查找替换」面板(VS Code是Ctrl+H)
- 勾选面板上的「正则表达式」按钮(就是那个
.*图标),再勾选「全局匹配」 - 输入以下内容:
- 查找内容:
((?:.*blue.*\n)+)|((?:(?!blue).*\n)+) - 替换内容:
$1$2
blue的行捕获到$1分组,不含的捕获到$2分组,替换后就自动把$1(也就是目标行)放到最前面了。 - 查找内容:
要是你的文本最后一行没有换行符,可以把查找内容微调成这个,适配性更强:
((?:.*blue.*\r?\n?)+)|((?:(?!blue).*\r?\n?)+)
场景2:用命令行工具(比如sed)批量处理文件
如果你需要批量处理本地文件,用sed命令一行就能搞定,直接在终端输入:
sed -e '/blue/!{H;d;}' -e '${x;s/^\n//;p;}' 你的文件名.txt
这个命令的逻辑超清晰:
- 遇到不含
blue的行,就先暂存到内存的「保留空间」,然后跳过当前行 - 遇到含
blue的行,直接输出到屏幕 - 处理到文件末尾时,把暂存的非
blue行取出来,去掉开头多余的换行后再输出
把你的测试文本放进去跑一遍,就能得到你想要的结果:
Michelle has a blue Audi S7 Sportback
Bradley has a blue Ford Edge
Paul has a red BMW i7
Tina has black Mercedes A-Class
Robert has a silver Volkswagen Golf
Carl has a white Tesla Model Y
备注:内容来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

