用三剑客grep sed awk 筛选配置文件中有用的行

大多数情况下筛选有用的行无非就是

一. 去掉注释行
二. 去掉空白行


注释行分两种情况:
    1. 注释字符在行首
    2. 注释字符前面还有未知多个空白字符,一般就是两种: 空格 制表符

空白行也可能有未知多个空白字符,一般只考虑 空格 和 制表符


假定现在有一个配置文件 httpd.conf , 注释字符是 # , 现在分别用grep sed awk 来筛选有用的行(内容太多不贴了,有兴趣自己测)

1、grep

cat /etc/httpd/conf/httpd.conf|grep -v "^[       ]*#"|grep -v "^[        ]*$"
cat /etc/httpd/conf/httpd.conf|grep -v "^["$'\t'" ]*#"|grep -v "^["$'\t'" ]*$"

cat /etc/httpd/conf/httpd.conf|grep -Ev "^[      ]*#|^[  ]*$"
cat /etc/httpd/conf/httpd.conf|grep -Ev "^["$'\t'" ]*#|^["$'\t'" ]*$"
cat /etc/httpd/conf/httpd.conf|grep -Ev "^["$'\t'" ]*(#|$)"

cat /etc/httpd/conf/httpd.conf|grep -Pv "^[$'\t' ]*(#|$)"

解释:
1、grep参数解释:
-v 反选
-E grep扩展正则表达式,可以直接写成egrep
-P Perl语言形式的扩展正则表达式

2、在shell中制表符的输入方式是 ctrl+v ,然后按 Tab 键,空格的话直接按 空格 键即可,于是就看到了上面命令中 [ ] 里面长长的空白,既包含了一个Tab,也包含了一个空格,而且位置不同的时候长度看起来也不同,当然这和系统与终端窗口的交互设计有关,不影响效果。

3、原始的grep也能识别 $‘\t’ 这种制表符的写法,前提是 $‘\t’ 外层没有引号,如果外层已经有引号了,还要给 $‘\t’ 单独再用一对引号引起来,否则无法正确识别。

4、用扩展正则表达式的明显好处是两步合并成一步,其实就是找并集的补集

5、Perl形式的扩展正则表达式兼容所有grep -E(或者egrep)形式的写法,并且即便 $‘\t’ 外层有引号也能被正确识别,不需要再给一对引号。

2、sed

cat /etc/httpd/conf/httpd.conf|sed -rn '/^[ \t]*(#|$)/!p'

3、awk

cat /etc/httpd/conf/httpd.conf|awk '!/^[ \t]*(#|$)/ {print $0}'

sed 和 awk 原生就能识别 \t ,所以这两种写法显得更友好,不过语法结构稍微复杂一些。


注:

如果不介意使用POSIX规范,^[ \t]*(#|$) 可以变为 ^[[:space:]]*(#|$)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值