我试图只保留以#
开头的注释行,这些注释行在一行上使用sed命令并非空白。我正在尝试这个
sed /^#\S+/'!'d file
然而,这没有打印任何内容。
说文件看起来像这样
# comment
# another comment
#
#
#
line1
line2
# extra comment
我想要
# comment
# another comment
# extra comment`
我的命令根本不提供任何输出。我试图以最简单的方式做到这一点。有什么想法吗?
答案 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个或更多空格字符后打印包含注释符号的任何行,该空格字符还包含至少一个非空白字符。