我想打印出一个包含以下一系列注释的文件:
</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来做这件事。
发布于 2013-07-01 01:27:13
使用grep
grep -v '^\s*$\|^\s*\#' temp在OSX / BSD系统上:
grep -Ev '^\s*$|^\s*\#' temp发布于 2013-07-01 10:44:51
使用awk
awk '!/^ *#/ && NF' file!/^ *#/ -表示不带空格的选择行,后跟NF符号&& -表示选择不为空的行# -是一个and运算符,用于确保如果上述两个条件均为真,则打印该行。发布于 2013-07-01 01:22:42
使用sed可能比使用grep更容易
sed -e '/^[[:space:]]*$/d' -e '/^[[:space:]]*#/d' test.in或者用ERE:
# Gnu sed need -re instead of -Ee
sed -Ee '/^[[:space:]]*(#|$)/d' test.in使用ERE,grep也可以相当容易地做到这一点:
# Not sure if Gnu grep needs -E or -r
grep -vE '^\s*(#|$)' test.in
# or a BRE
grep -v '^\s*\(#\|$\)' test.inhttps://stackoverflow.com/questions/17392869
复制相似问题