sed并不匹配以'#'开头的行。如果前面有空格或标签

时间:2016-11-02 19:13:57

标签: regex bash sed

我试图输出来自apache配置的所有行,只是尝试显示没有注释的重要行(以#或空行[$]开头的行),为此我做了:

sed '/^#\|^$/d' httpd.conf

但是如果它们在该字符之前有空格或制表符,它仍会显示一些行。

有没有解决这个问题?如果可能的话,我想继续使用sed而不是awk或任何其他工具。

2 个答案:

答案 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.