使用SED保持非空白注释行

时间:2016-10-14 20:30:46

标签: bash sed command

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

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

然而,这没有打印任何内容。

说文件看起来像这样

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

我想要

 # comment
 # another comment
 # extra comment`

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

3 个答案:

答案 0 :(得分:2)

使用sed

sed -n '/^[[:blank:]]*#[[:blank:]]*[^[:blank:]]/p'
  • 字符类[:blank:]包含空格和标签

  • ^[[:blank:]]*在开始时匹配零个或多个空格

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

  • [^[:blank:]]匹配除空格或标签

  • 之外的任何字符

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

示例:

$ cat file.txt
# comment
 # another comment
 #

 #

 #
 line1
 line2
 # extra comment

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

答案 1 :(得分:2)

$ 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

答案 2 :(得分:1)

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