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

如何用Shell的grep命令在单行提取多个指定格式的参数?

用Shell的grep命令提取Objective-C方法参数名

这问题我刚好之前处理过,用grep结合正则表达式就能轻松搞定!针对你给出的Objective-C方法声明,我们可以分两种方式实现:

方法一:分步提取(兼容多数基础grep版本)

假设你把方法代码保存到了methods.txt文件中,内容如下:

- (id)initWithFrame:(CGRect)frame ;
- (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated ;
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context ;

运行以下命令:

grep -Eo '\)[[:space:]]+[a-zA-Z0-9_]+' methods.txt | grep -Eo '[a-zA-Z0-9_]+'

命令解释:

  1. 第一个grep -Eo:
    • -E 启用扩展正则表达式,让语法更简洁;
    • -o 只输出匹配到的部分,而不是整行;
    • 正则\)[[:space:]]+[a-zA-Z0-9_]+ 匹配右括号) + 一个或多个空白字符 + 参数名(字母/数字/下划线),输出结果是类似) frame、) view的片段。
  2. 第二个grep -Eo:从第一步的结果中提取纯参数名,过滤掉括号和空格。

方法二:一步到位(需支持Perl正则的grep版本)

如果你的grep支持Perl兼容正则(大部分Linux/macOS的grep都支持),可以用更简洁的命令:

grep -Po '\)\s+\K[a-zA-Z0-9_]+' methods.txt

命令解释:

  • -P 启用Perl兼容正则;
  • -o 同样只输出匹配部分;
  • 正则\)\s+\K[a-zA-Z0-9_]+中,\K是Perl正则的特殊语法,表示忽略前面匹配的内容,直接输出后面的参数名,一步到位得到结果。

直接处理管道输入

如果不想存文件,直接把代码通过管道传入grep:

echo "- (id)initWithFrame:(CGRect)frame ; - (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated ; - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context ;" | grep -Po '\)\s+\K[a-zA-Z0-9_]+'

两种方法最终都会输出你需要的参数名:

frame
view
animated
keyPath
object
change
context

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:32:58