如何grep不以“#”或“;”开头的行?

如何grep不以“#”或“;”开头的行?

我想 grepsmb.conf并只查看未注释的行。

答案1

grep "^[^#;]" smb.conf

第一个指^的是行的开头,因此不会排除在第一个字符之后开始注释的行。 [^#;]表示不是#或 的任何字符;

换句话说,它报告以 和 之外的任何字符开头的#;。它与报告不以#and开头的行;(您将使用)不同,grep -v '^[#;]'因为它还排除空的行,但在这种情况下这可能是更好的选择,因为我怀疑你关心空行。

如果您想忽略前导空白字符,可以将其更改为:

grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf

或者

grep -vxE '[[:blank:]]*([#;].*)?' smb.conf

或者

awk '$1 ~ /^[^;#]/' smb.conf

答案2

维姆解决方案:

:v/^\s*[#\n]/p

我在尝试自己寻找 vim 解决方案时偶然发现了这个问题。

答案3

oliver nadj 的答案中的 grep 管道可以通过以下方式消除(假设 GNUgrep或兼容):

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>

答案4

grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

这对我有用。忽略注释或空行,甚至哈希标记或分号之前的空格

相关内容