使用 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
我试图只保留以 #
开头的注释行,并且在一行中使用 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