我想grep smb.conf,仅看到未注释的行。

评论

testparm可以更好地执行此操作,因为它也显示默认值。

@ F.Hauri谢谢。它也在工作。但这也会产生一些不需要的信息(在我的情况下),也应将其删除...

超集:任何正则表达式:superuser.com/questions/655715/regex-does-not-begin-by-pattern

通过PCRE grep的另一种方式stackoverflow.com/a/45917459/3297613

#1 楼

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


第一个^指的是该行的开头,因此带有第一个字符后的注释行不会被排除。 [^#;]表示不是#;的任何字符。

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

如果要忽略开头的空白字符,可以将其更改为:

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




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




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


评论


正确的答案是:cat /etc/samba/smb.conf | grep ^ [^#\;]但是还是谢谢你

–否认
13年1月11日在20:09

是的,或者您可以使用“引号”;我随后对其进行了编辑。

–金锁
13年1月11日在20:11

@denys你错了:goldilocks的反应并不比你差。 .1请避免使用猫... |句法!。 .2对于鞭打空行和仅包含空格的行,也许可以使用注释U使用:grep -v“ ^ * \(#。* \ | \)$”
– F. Hauri
13年1月11日在20:14

@EmanuelBerg这是没用的叉子。猫文件| grep“ blah”表示通过fifo运行两个二进制文件,而grep“ blah” blog.sanctum.geek.nz/useless-use-of-cat ...用于示例

– F. Hauri
2013年1月11日在22:01



它做的并不完全相同。它创建2个进程和1个进程就足够的管道。阅读@ F.Hauri的最新评论中给出的链接。

– rahmu
2013年1月11日在22:12

#2 楼

Vim解决方案:

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


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

评论


这也将删除以空格开头的行。

– Kusalananda♦
19年6月7日14:57

真正。我发现这对于配置文件很有用,因为注释之间的线会填满输出。如果您希望保留空白行,则将*更改为+,如下所示:v / ^ \ s + [#\ n] / p

–大卫·洛德(David Lord)
19年6月8日在23:27



#3 楼

可以通过(假设GNU grep或兼容的)消除通过Oliver nadj的答案到grep的管道:

评论


第二个grep i @ nadj看起来没用,@ goldilocks的回答远远不够。

–炼金术士
2015年10月13日在9:19

我同意goldilocks的回答是正确的。但是,我也认为不显示空行很有用。

– Morten Lind
2015年10月13日在17:41

#4 楼

这些例子可能对人们有用。

[user@host tmp]$ cat whitespacetest
# Line 1 is a comment with hash symbol as first char

# Line 2 is a comment with hash symbol as second char
  # Line 3 is a comment with hash symbol as third char
        # Line 4 is a comment with tab first, then hash
        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$


第一个grep示例不包括以任意数量的空格开头,后跟哈希符号的行。

[user@host tmp]$ grep -v '^[[:space:]]*#' whitespacetest

        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$


第二个不包括以任意空格开头的行,后跟一个哈希符号或分号。

[user@host tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest

[user@host tmp]$


#5 楼

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


那对我有用。忽略注释的行或空行,甚至在井号或分号前留空格

#6 楼

在这里,我得到了更好的结果(假设使用GNU grep或兼容的):用于空白行。

评论


在哪种类型的conf文件中,<或/用于注释?我知道很多conf文件格式,其中<是注释以外的所有内容。 !有时像在X资源文件中一样使用。

–StéphaneChazelas
17 Mar 16 '17 at 10:42

#7 楼

grep -v '^$\|^\s*#' temp


这个要好得多,我从https://stackoverflow.com/questions/17392869/how-to-print-a-file-exception-comments-and-blank-lines获得-using-grep-sed

假定GNU grep或兼容。

评论


该问题还考虑了以开头的行;作为应删除的注释。

– Kusalananda♦
19年6月7日14:56



#8 楼

egrep -v "^#|^$" anyfile.txt


此命令用于grep文件中的所有信息,不包括注释和空白行。

评论


注意smb.conf也用;注释。

– Jeff Schaller♦
19年7月11日在18:41

#9 楼

这应该显示的文件没有以#开头的行:
grep -v "^#" filename

评论


这对以;开头的行不起作用。

– Kusalananda♦
19年6月7日14:56