mac sed在匹配的内容之前添加新行

时间:2018-05-11 07:18:27

标签: macos shell awk sed

我们需要在ios项目中添加注释,OC方法声明为- (void)...,我想写一个脚本来帮助我做到这一点。 在源文件中,我想在使用//method name: ....的方法声明之前添加注释,但我不擅长shell ...

例如,

- (id)initWithWindow:(UIWindow *)window;

- (id)initWithView:(UIView *)view;

- (void)show:(BOOL)animated;

- (void)hide:(BOOL)animated;

- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;

我想添加这样的新行:

.
.
.
//method: - (void)hide:(BOOL)animated;
//parma: animated
- (void)hide:(BOOL)animated;

//method: - (id)initWithView:(UIView *)view;
//parma: view
- (id)initWithView:(UIView *)view;
.
.
.

我该如何处理mac上的shell?

2 个答案:

答案 0 :(得分:0)

我想你想要这样的东西:

sed '/-/{h;s|^|//method: |;p;g;s|.*)|//parma: |;s|;$||;p;g;}' filename

这会将结果打印到屏幕上。您可以将其重定向到另一个文件:

sed '/-/{h;s|^|//method: |;p;g;s|.*)|//parma: |;s|;$||;p;g;}' filename > newfile

或者修改旧文件:

sed -i '' '/-/{h;s|^|//method: |;p;g;s|.*)|//parma: |;s|;$||;p;g;}' filename

这是一个中等复杂的sed命令。如果你想了解它,我建议你先练习更简单的sed命令。

答案 1 :(得分:0)

您可以使用以下命令:

sed 's|^- (.*)\([a-z]*\);|//method: &\n//parma: \1\n&|g' inputfile > outputfile

示例输入:

- (id)initWithWindow:(UIWindow *)window;

- (void)hide:(BOOL)animated;

- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;

示例输出:

//method: - (id)initWithWindow:(UIWindow *)window;
//parma: window
- (id)initWithWindow:(UIWindow *)window;   

//method: - (void)hide:(BOOL)animated;
//parma: animated
- (void)hide:(BOOL)animated;

//method: - (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;
//parma: delay
- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;