不太熟悉 的复杂用法sed
,但我现在有这个需求。我有一个文件 1.txt,其内容采用以下模式:
sree@amby01:/home/sree : cat 1.txt
SSL
this first line
#comment line
second line
# third comment
# line nline
#ApiText
lkjfl
# my line
your line
sree@amby01:/home/sree :
现在,我想删除 block 之间的注释行,但不应删除SSL....#ApiText
该行。#ApiText
输出应如下所示:
SSL
this first line
second line
#ApiText
它是一个 bash shell。我知道如何单独删除注释行,但不知道如何删除注释行,除非注释后面跟着某个文本。我只能用sed
.
答案1
方法有很多,但其中一种可以是:
sed '/SSL/,/#ApiText/{//b;/^#/d}' 1.txt
/SSL/,/#ApiText/
- 将执行命令的地址范围//
- 对于具有先前正则表达式的行(SSL
或#ApiText
- 任何找到的行)b
- 转到指令末尾(意思是什么也不做)/^#/d
- 删除(不打印)以以下开头的行#