使用 SED 保持非空白注释行

Keeping non-blank comment lines with SED

我试图只保留以 # 开头的注释行,并且在一行中使用 sed 命令不留空。我正在尝试这个

sed /^#\S+/'!'d file

但是,这不会打印任何内容。

假设文件看起来像这样

 # comment
 # another comment
 #   
 #    
 #
 line1
 line2
 # extra comment

我想要

 # comment
 # another comment
 # extra comment`

我的命令根本没有输出。我试图以最简单的方式做到这一点。有什么想法吗?

sed:

sed -n '/^[[:blank:]]*#[[:blank:]]*[^[:blank:]]/p'
  • 字符class[:blank:]包括space和tab

  • ^[[:blank:]]* 匹配开头的零个或多个空格

  • # 匹配文字 #,然后 [[:blank:]]* 匹配零个或多个空格

  • [^[:blank:]] 匹配除 space 或 tab

  • 之外的任何字符

请注意,并非所有 sed 都支持将特殊序列 \S 扩展到任何非白色 space。

示例:

$ cat file.txt
# comment
 # another comment
 #

 #

 #
 line1
 line2
 # extra comment

$ sed -n '/^[[:blank:]]*#[[:blank:]]*[^[:blank:]]/p' file.txt
# comment
 # another comment
 # extra comment

SED 是必须的吗? 如果没有,您可以尝试,例如,grep '^\s*#.*[^\s]' — 它会打印在 0 个或多个空白字符之后包含注释符号的任何行,其中还包含至少一个非空白字符。

$ grep '#.*[^[:blank:]]' file
 # comment
 # another comment
 # extra comment

$ sed -n '/#.*[^[:blank:]]/p' file
 # comment
 # another comment
 # extra comment

$ awk '/#.*[^[:blank:]]/' file
 # comment
 # another comment
 # extra comment