You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bash提取Swift函数名并插入#Mark标记行

解决Swift函数自动添加#Mark标记的问题

我来帮你搞定这个Swift函数的标记插入需求!你之前用grep和sed没成功,主要是没把正则分组提取和替换逻辑结合好,试试下面的sed命令,完美实现你要的效果:

核心命令

通用版本(输出到新文件)

sed -E 's/^[[:space:]]*func[[:space:]]+([a-zA-Z0-9_]+).*/#Mark \1\n&/' input.swift > output.swift

直接修改原文件

  • Linux环境:
sed -i -E 's/^[[:space:]]*func[[:space:]]+([a-zA-Z0-9_]+).*/#Mark \1\n&/' input.swift
  • macOS环境(macOS的sed需要额外的空参数给-i):
sed -i '' -E 's/^[[:space:]]*func[[:space:]]+([a-zA-Z0-9_]+).*/#Mark \1\n&/' input.swift

命令解释

让我拆解下这个命令的逻辑,帮你理解为什么它能工作:

  • -E:启用扩展正则表达式,让我们可以用更简洁的分组语法
  • ^[[:space:]]*:匹配行首的任意空白字符(空格、制表符都算),兼容Swift代码里的缩进格式
  • func[[:space:]]+:匹配func关键字和后面的一个或多个空格
  • ([a-zA-Z0-9_]+):核心分组,捕获Swift函数名(函数名允许字母、数字、下划线),这部分就是我们要提取的内容
  • .*:匹配函数行剩下的所有内容(参数列表、大括号等)
  • #Mark \1\n&:替换规则:
    • \1:引用刚才捕获的函数名
    • \n:插入换行符,让标记行单独占一行
    • &:代表原来匹配的整行函数代码

效果演示

输入代码:

func showProductsList(result: UserResult<[Product]>) { }
func showFetchNextSliceFailed(result: UserResult<[Product]>) { }

运行命令后输出:

#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) { }
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) { }

完全符合你想要的结果!如果你的函数名有特殊字符(比如Swift允许的下划线开头、或者包含Unicode字符),可以调整正则里的捕获组部分,比如把[a-zA-Z0-9_]改成[\p{L}\p{N}_]来支持Unicode字母数字,不过大部分场景下默认的正则就够用了。

内容的提问来源于stack exchange,提问作者Mehul Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:11:23