我试图输出来自apache配置的所有行,只是尝试显示没有注释的重要行(以#或空行[$]开头的行),为此我做了:
sed '/^#\|^$/d' httpd.conf
但是如果它们在该字符之前有空格或制表符,它仍会显示一些行。
有没有解决这个问题?如果可能的话,我想继续使用sed而不是awk或任何其他工具。
答案 0 :(得分:3)
将[ \t]*
添加到正则表达式以选择性地匹配空格和制表符。
sed '/^[ \t]*#\|^[ \t]*$/d' httpd.conf
或者,使用括号来避免重复:
sed '/^[ \t]*\(#\|$\)/d' httpd.conf
答案 1 :(得分:1)
sed '/^[[:space:]]*[#$]/d' httpd.conf
适合我。
$ cat httpd.conf
TEST1
# test2
# test3
TESTkkk
$ Another comment
$ Another comment2
# Another comment
# Another comment with tab
$ sed '/^[[:space:]]*[#$]/d' httpd.conf
TEST1
TESTkkk
该表达式表示如果第一个字符后跟任意数量的空格是集合#$
中的一个字符,则从输出中删除(d
)该行。
更新:[[:space:]]
也为我制作了标签,但基于https://superuser.com/a/786423/44976的备选方案是:
sed '/^[ \t]*[#$]/d' httpd.conf
这两个表达式都在OSX上的以下版本上进行了测试:
sed (GNU sed) 4.2.2 Copyright (C) 2012 Free Software Foundation, Inc.