正则表达式删除评论但不是shebang

时间:2013-05-03 07:33:01

标签: regex linux bash

我有一个正则表达式,使用此正则表达式代码删除bash中的注释

'/^\#/d'

但它也删除了#!这应该不是因为它不是评论标签而是shebang

那么怎样才能忽略#!在正则表达式?

5 个答案:

答案 0 :(得分:2)

此行将删除以#开头的所有评论,但后面没有!。

'/^#[^!]/d'

答案 1 :(得分:1)

这使得!可选

'/^#[^!]*/d'

答案 2 :(得分:0)

试试这个:

awk '/^$/ || (NR == 1 && /^#!/) || /^[^#]/'

这匹配以下行:

  • 是空的,或者
  • 是第一行,以hashbang开头,或者
  • 以不是哈希的字符开头。

打印出匹配的行。

答案 3 :(得分:0)

^\#[^!]不是很正确,因为它要求!之后的任何非#字符,因此它不会删除只有{{#的字符。 1}}之后没有任何东西。我不知道你正在使用什么样的正则表达式,所以语法可能有所不同,但你正在寻找negative forward lookahead^#(?!!)。此外,#字符根本不需要使用\进行转义。

答案 4 :(得分:0)

这对我有用:

/^(#[^!]|#$)/d

其中|#$是匹配单个哈希行特殊情况的附加项。 E.g:

cat commented.sh | sed '/^\(#[^!]\|#$\)/d'