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