如何使用sed删除顶部注释行?

如何使用sed删除顶部注释行?,sed,Sed,我知道如何删除所有注释或删除文件中的指定行,但不知道如何只删除包含作者、版权等的前几行注释。我不能只使用删除前几行,因为可能有一些源文件根本不污染前几行注释块。有什么建议吗 更新:源文件是objective-c文件,所有顶部注释行都以/开头。也许规则“删除所有注释行,直到找到第一个非注释行,然后停止”最能描述我想要实现的目标 第二个问题:另外,正在寻找一种方法,告诉sed递归遍历所有项目目录和文件 更新2。下面是我试图修改的objective-c文件的注释块示例: // // MyProjec

我知道如何删除所有注释或删除文件中的指定行,但不知道如何只删除包含作者、版权等的前几行注释。我不能只使用删除前几行,因为可能有一些源文件根本不污染前几行注释块。有什么建议吗

更新:源文件是objective-c文件,所有顶部注释行都以
/
开头。也许规则“删除所有注释行,直到找到第一个非注释行,然后停止”最能描述我想要实现的目标

第二个问题:另外,正在寻找一种方法,告诉sed递归遍历所有项目目录和文件

更新2。下面是我试图修改的objective-c文件的注释块示例:

//
//  MyProjectAppDelegate.m
//  MyProject
//
//  Created by Name Surname on 2011-09-20.
//  Copyright 2012 JSC MyCompany. All rights reserved.
//

如果awk也被接受,请查看以下内容:

 awk 'BEGIN{f=1}f&&/^\/\//{next;}{f=0}1' yourFile
测试

kent$  cat test.txt
//
//  MyProjectAppDelegate.m
//  MyProject
//
//  Created by Name Surname on 2011-09-20.
//  Copyright 2012 JSC MyCompany. All rights reserved.
//
real codes come here...

// comments in codes should be kept

foo bar foo bar


kent$  awk 'BEGIN{f=1}f&&/^\/\//{next;}{f=0}1' test.txt
real codes come here...

// comments in codes should be kept

foo bar foo bar
您可以将find和awk结合起来进行递归处理


塞德也可以用同样的想法做到这一点。需要在保留空间中写一个标记,并检查每行的保留空间。它有一个-i选项的优点,它允许您更改原始文件。然而,我觉得awk做这项工作更直接。将更改后的文本保存回原始文件也不是一件难事。

如果awk也被接受,请查看以下内容:

 awk 'BEGIN{f=1}f&&/^\/\//{next;}{f=0}1' yourFile
测试

kent$  cat test.txt
//
//  MyProjectAppDelegate.m
//  MyProject
//
//  Created by Name Surname on 2011-09-20.
//  Copyright 2012 JSC MyCompany. All rights reserved.
//
real codes come here...

// comments in codes should be kept

foo bar foo bar


kent$  awk 'BEGIN{f=1}f&&/^\/\//{next;}{f=0}1' test.txt
real codes come here...

// comments in codes should be kept

foo bar foo bar
您可以将find和awk结合起来进行递归处理


塞德也可以用同样的想法做到这一点。需要在保留空间中写一个标记,并检查每行的保留空间。它有一个-i选项的优点,它允许您更改原始文件。然而,我觉得awk做这项工作更直接。将更改后的文本保存回原始文件也不是一件难事。

这里有一个
sed
解决方案,可与Kent的
test.txt
一起使用:

sed -n '/^ *\/\//! { :a;p;N;s/.*\n//;ba}'
输出:

real codes come here...

// comments in codes should be kept

foo bar foo bar
解释

sed-n'/^*\/\/!{#如果行不以开头//
:a#标签a
打印行
N#将下一行附加到PS
s/*\n/#删除上一行
ba#分支到a
}“
这里有一个与Kent的
test.txt
配合使用的
sed
解决方案:

sed -n '/^ *\/\//! { :a;p;N;s/.*\n//;ba}'
输出:

real codes come here...

// comments in codes should be kept

foo bar foo bar
解释

sed-n'/^*\/\/!{#如果行不以开头//
:a#标签a
打印行
N#将下一行附加到PS
s/*\n/#删除上一行
ba#分支到a
}“
试试看:

sed '0,\#^\([^/]\|/[^/]\)\|^$# d'
试试看:

sed '0,\#^\([^/]\|/[^/]\)\|^$# d'

定义“第一”的含义:直到非注释行?什么样的评论?C、 shell,SQL,…@Tichodroma。请查看更新。使用
find
查找目录树中的所有文件。定义“first”的含义:直到非注释行?什么样的评论?C、 shell,SQL,…@Tichodroma。请查看更新。使用
find
查找目录树中的所有文件。不要害怕空格,这不是高尔夫:
awk-vf=1{f&&/^\/{next}{f=0;print}你的文件
不要害怕空格,这不是高尔夫:
awk-vf=1{f&&/^\/{next}{f=0;print}你的文件