【问题标题】:grep lines NOT starting with # or empty linesgrep 行不以 # 或空行开头
【发布时间】:2016-05-06 15:39:07
【问题描述】:

当我使用 grep (GNU grep) 2.22 打印时 not 以 # 开头或 not 为空,我需要这样做

$ grep -v '^#' fileNameIGrepFor | grep -v '^$'

我觉得这很难看,有没有更聪明的方法(请使用grep)

【问题讨论】:

  • 只需使用 grep 的 "\|"运算符匹配^# 或^$: grep -v "^#\|^$" 文件名

标签: regex unix grep regex-negation


【解决方案1】:
grep -v '^#' fileNameIGrepFor | grep -v '^$'

可以简化为:

grep -v '^#\|^$' fileNameIGrepFor

要删除丑陋的\,您可以使用grep -E,或等效的egrep:

egrep -v '^#|^$' fileNameIGrepFor

然后您可以通过对术语进行分组来澄清这一点:

egrep -v '^(#|$)' fileNameIGrepFor

然后通过在 # 之前检查空格使其更加健壮:

egrep -v '^(\s*#|$)' fileNameIGrepFor

也许您还想排除所有空行(仅包含空格)?在这种情况下,更改很简单:

egrep -v '^\s*(#|$)' fileNameIGrepFor

【讨论】:

  • 就我而言,我需要获取 YAML 文件中的顶级元素。所以这也是所有没有从空格开始的行。 grep -v '^#\|^$\|^ ' ./some.yaml
  • @nelaaro 根据我上面的回答,您可以删除丑陋的反斜杠:egrep -v '^(#|$| )'
  • 或者,您可以检查确实以非散列开头的行:grep '^[^#]'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
相关资源
最近更新 更多