使用 sed 删除除一条注释之外的注释行

使用 sed 删除除一条注释之外的注释行

不太熟悉 的复杂用法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- 删除(不打印)以以下开头的行#

相关内容