首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用grep/sed打印文件,不包括注释和空行?

问如何使用grep/sed打印文件,不包括注释和空行?
EN

Stack Overflow用户
提问于 2013-07-01 01:16:22
回答 18查看 62.7K关注 0票数 36

我想打印出一个包含以下一系列注释的文件:

代码语言:javascript
复制
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
    #   SSL Engine Switch:

本质上,该文件包含多个缩进级别,其中注释以#符号开头。

grep应该删除空行,以及文本前有散列符号的行(这意味着这些是注释)。

我知道可以通过:grep -v '^$'删除空行

但是,如何删除带有前导空格的行,然后删除#符号,并只打印包含实际代码的行?我想在bash中使用grep和/或sed来做这件事。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2013-07-01 01:27:13

使用grep

代码语言:javascript
复制
grep -v '^\s*$\|^\s*\#' temp

在OSX / BSD系统上:

代码语言:javascript
复制
grep -Ev '^\s*$|^\s*\#' temp
票数 77
EN

Stack Overflow用户

发布于 2013-07-01 10:44:51

使用awk

代码语言:javascript
复制
awk '!/^ *#/ && NF' file

  • !/^ *#/ -表示不带空格的选择行,后跟
  • NF符号
  • && -表示选择不为空的行# -是一个and运算符,用于确保如果上述两个条件均为真,则打印该行。
票数 28
EN

Stack Overflow用户

发布于 2013-07-01 01:22:42

使用sed可能比使用grep更容易

代码语言:javascript
复制
sed -e '/^[[:space:]]*$/d' -e '/^[[:space:]]*#/d' test.in

或者用ERE:

代码语言:javascript
复制
# Gnu sed need -re instead of -Ee
sed -Ee '/^[[:space:]]*(#|$)/d' test.in

使用ERE,grep也可以相当容易地做到这一点:

代码语言:javascript
复制
# Not sure if Gnu grep needs -E or -r
grep -vE '^\s*(#|$)' test.in

# or a BRE
grep -v '^\s*\(#\|$\)' test.in
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17392869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档