Regex 正则表达式删除注释,但不删除shebang
我得到了一个正则表达式,它使用这个正则表达式代码删除bash中的注释Regex 正则表达式删除注释,但不删除shebang,regex,linux,bash,Regex,Linux,Bash,我得到了一个正则表达式,它使用这个正则表达式代码删除bash中的注释 '/^\#/d' 但它也会删除#!这不应该是因为它不是一个注释标签,而是一个shebang 那么,如何才能忽视#!用正则表达式 这一行将删除所有以#开头的注释,但后面不跟一个 '/^#[^!]/d' 此行将删除以#开头的所有注释,但后面不跟一个 '/^#[^!]/d' 这使得可选 '/^#[^!]*/d' 这使得可选 '/^#[^!]*/d' 试试这个: awk '/^$/ || (NR == 1 &&
'/^\#/d'
但它也会删除#!这不应该是因为它不是一个注释标签,而是一个shebang
那么,如何才能忽视#!用正则表达式 这一行将删除所有以#开头的注释,但后面不跟一个
'/^#[^!]/d'
此行将删除以#开头的所有注释,但后面不跟一个
'/^#[^!]/d'
这使得
代码>可选
'/^#[^!]*/d'
这使得代码>可选
'/^#[^!]*/d'
试试这个:
awk '/^$/ || (NR == 1 && /^#!/) || /^[^#]/'
这与以下行匹配:
- 都是空的,或者
- 是第一行,以hashbang开头,或者
- 以不是散列的字符开头
匹配的行被打印出来。请尝试以下操作:
awk '/^$/ || (NR == 1 && /^#!/) || /^[^#]/'
这与以下行匹配:
- 都是空的,或者
- 是第一行,以hashbang开头,或者
- 以不是散列的字符开头
匹配的行被打印出来。^\#[^!]
不太正确,因为它需要任何非代码>字符位于#
之后,因此它不会删除仅为#
且后面没有任何内容的行。我不知道您使用的是什么风格的正则表达式,因此语法可能会有所不同,但您正在寻找:^(?!!)
。另外,\
字符根本不需要用\
转义。^\\\[^!]
不太正确,因为它需要任何非代码>字符位于#
之后,因此它不会删除仅为#
且后面没有任何内容的行。我不知道您使用的是什么风格的正则表达式,因此语法可能会有所不同,但您正在寻找:^(?!!)
。另外,\
字符根本不需要用\
转义。这对我很有用:
/^(#[^!]|#$)/d
其中,|#$
是匹配单个哈希行特殊情况的加法。例如:
cat commented.sh | sed '/^\(#[^!]\|#$\)/d'
这对我很有用:
/^(#[^!]|#$)/d
其中,|#$
是匹配单个哈希行特殊情况的加法。例如:
cat commented.sh | sed '/^\(#[^!]\|#$\)/d'
您是否尝试过'/^\#^[!]/d'/
?抱歉,我现在无法尝试自己…你使用的是哪种正则表达式风格?你说的风格是什么意思?@Axel它根本不会删除任何注释是的,我错放了^
…你试过'/^\#^[!]/d'/
?抱歉,我现在不能亲自尝试…你使用的是哪种正则表达式风格?你说的风格是什么意思?@Axel它根本不会删除任何注释是的,我错放了^
…我找到了。只要去掉上面的*就可以了。所以它应该是'/^.[^!]/d'我明白了。只要去掉上面的*就可以了。所以应该是“/^#[^!]/d’我已经知道了,但我会把你的答案作为正确答案,因为你也知道了。这不会删除空的评论行,例如只有一行。
。我已经知道了,但我会把你的答案作为正确答案,因为你也知道了。这不会删除空的评论行,例如只有一行。
#
。你不是忘了.*
后面的.
?我用sed-I'/^\s*\(#[^!].\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$\)/d'注释。sh
你没有忘记.
后面的.
?我使用sed-I'/^\s*\(#[^!].\|$\)/d'注释。sh