Grep非内联注释行,不带-v选项

时间:2018-03-08 04:03:24

标签: grep

我想grep所有没有#评论行,

虽然我可以使用grep -v -E '^\s*#',但我想知道是否有其他方法不使用-v(恢复)选项。

    #a comment line from a tab
     abcd
xx
#a comment line from head
 #a comment line from a space

我尝试了很多模式但失败了:

grep -E '^\s*[^#]'
grep -E '^[ \t]*[^#]'

1 个答案:

答案 0 :(得分:1)

尝试:

$ grep -E '^\s*[^#[:space:]]' hashfile 
     abcd
xx

讨论

由于空格不是#,因此正则表达式^\s*[^#]将以零或多个空格后跟一个空格开头的任何行。

如果需要,我们可以明确地使用空格和制表符:

$ grep -E '^\s*[^# \t]' hashfile 
     abcd
xx

兼容性

\sgrep的GNU扩展。在扩展正则表达式(-E)中,[:space:]是包含空格字符的字符类。对于便携式解决方案,请使用:

$ grep -E '^[[:space:]]*[^#[:space:]]' hashfile 
     abcd
xx