就是要删除一个项目中所有文件的注释的shell脚本,注释的格式如下:
删除一个文件夹中的文件中含有制定字符的shell脚本
答案:2 悬赏:40 手机版
解决时间 2021-02-04 17:00
- 提问者网友:且恨且铭记
- 2021-02-03 21:55
最佳答案
- 五星知识达人网友:北城痞子
- 2021-02-03 22:34
sed '/\/\*/{s#/\*.*\*/##g;t;:1;N;/\*\//!b1;s#/\*.*\*\/##}' file
C语言的注释格式为:,以此为处理参考:
/\/\*/
匹配正则表达式,匹配内容为##g;t;
将替换为空,如果替换成功,则t(在s替换成功后,转到命令脚本结束,读取下一行信息)。
#号为替换分隔符,结尾的g表示全局替换,即避免有 在同一行出现。
这里面的/不需要转义(转义不转义都可以正确识别),但是*仍然需要\转义。
若匹配没在同一行):
:1
标识一个位置,位置名称为1。
N;
将这一行保存至模式空间,并读取下一行。
/\*\//!b1;
若不匹配*/,则命令脚本从:1处开始执行。(之前标识的位置1)
!为/\*\//匹配的否定,b1,转到:1处。
此处相当于循环,不匹配就一直将文件读下去,直到匹配*/,此时模式空间的内容大致为:
(若直到文件结束,仍没有*/出现,在结束后,输出模式空间的所有内容,即从,不进行b1的操作,进行下一步:
s#/\*.*\*\/##
同上替换,将满足的内容替换为空。
结束。
替换会产生空行,如果想删除空行,再追加 | sed '/^$/d'
C语言的注释格式为:,以此为处理参考:
/\/\*/
匹配正则表达式,匹配内容为##g;t;
将替换为空,如果替换成功,则t(在s替换成功后,转到命令脚本结束,读取下一行信息)。
#号为替换分隔符,结尾的g表示全局替换,即避免有 在同一行出现。
这里面的/不需要转义(转义不转义都可以正确识别),但是*仍然需要\转义。
若匹配没在同一行):
:1
标识一个位置,位置名称为1。
N;
将这一行保存至模式空间,并读取下一行。
/\*\//!b1;
若不匹配*/,则命令脚本从:1处开始执行。(之前标识的位置1)
!为/\*\//匹配的否定,b1,转到:1处。
此处相当于循环,不匹配就一直将文件读下去,直到匹配*/,此时模式空间的内容大致为:
(若直到文件结束,仍没有*/出现,在结束后,输出模式空间的所有内容,即从,不进行b1的操作,进行下一步:
s#/\*.*\*\/##
同上替换,将满足的内容替换为空。
结束。
替换会产生空行,如果想删除空行,再追加 | sed '/^$/d'
全部回答
- 1楼网友:青尢
- 2021-02-03 22:50
同问。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯