测试工作常用Linux shell命令-去除空白行及两种空白行去除时的注意事项(基于sed)

日常工作中,有些文档里的内容可能并不都是我们想要的,比如说一些注释什么的。
如下进入/etc/passwd,发现前10行是有注释的,也保不准其他还有什么地方有注释,那么现在需求就是:去除内容中的注释行,并且产生的空白行也不要。

     1  ##
     2  # User Database
     3  #
     4  # Note that this file is consulted directly only when the system is running
     5  # in single-user mode.  At other times this information is provided by
     6  # Open Directory.
     7  #
     8  # See the opendirectoryd(8) man page for additional information about
     9  # Open Directory.
    10  ##
    11  nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
    12  root:*:0:0:System Administrator:/var/root:/bin/sh
    13  daemon:*:1:1:System Services:/var/root:/usr/bin/false
    14  _uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
    15  _taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
    ......#后面的内容省略

例一:

  • 步骤一:先去除以#开头的注释行
    命令:cat testpasswd | sed 's/^#.*$//g' | less
    结果:
[16210504@izuf60jasqavbxb9efockpz ~]$ cat Allen_qin/testpasswd | sed 's/^#.*$//g' | less











nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
_networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false
_installassistant:*:25:25:Install Assistant:/var/empty:/usr/bin/false
_lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false
_postfix:*:27:27:Postfix Mail Server:/var/spool/postfix:/usr/bin/false
_scsd:*:31:31:Service Configuration Service:/var/empty:/usr/bin/false
_ces:*:32:32:Certificate Enrollment Service:/var/empty:/usr/bin/false
  • 步骤二: 删除空白行
    命令:cat /etc/passwd | sed 's/^#.*$//g' | sed '/^$/d'| less
    结果:
[16210504@izuf60jasqavbxb9efockpz ~]$ cat Allen_qin/testpasswd | sed 's/^#.*$//g' | sed '/^$/d'| less
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
_networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false
_installassistant:*:25:25:Install Assistant:/var/empty:/usr/bin/false
_lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false
_postfix:*:27:27:Postfix Mail Server:/var/spool/postfix:/usr/bin/false
_scsd:*:31:31:Service Configuration Service:/var/empty:/usr/bin/false
_ces:*:32:32:Certificate Enrollment Service:/var/empty:/usr/bin/false
_appstore:*:33:33:Mac App Store Service:/var/empty:/usr/bin/false
......#后面内容省略
这样就完成了空白行的删除,下面再对上面的例子进行“相同”操作(加了双引号的相同~)来看看现象:

例二:

  • 步骤一:还是先去除以#开头的注释行
    命令:cat testpasswd | sed 's/^#.*$/ /g' | less
    结果:
[16210504@izuf60jasqavbxb9efockpz ~]$ cat Allen_qin/testpasswd | sed 's/^#.*$/ /g' | less










nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
_networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false
_installassistant:*:25:25:Install Assistant:/var/empty:/usr/bin/false
_lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false
_postfix:*:27:27:Postfix Mail Server:/var/spool/postfix:/usr/b
  • 步骤二:还是使用与例一相同的命令对空白行进行删除
    命令:cat /etc/passwd | sed 's/^#.*$/ /g' | sed '/^$/d'| less
    结果:
[16210504@izuf60jasqavbxb9efockpz ~]$ cat Allen_qin/testpasswd | sed 's/^#.*$/ /g' | sed '/^$/d'| less









nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
_networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false

这个时候奇怪的现象发生了,空白行并没有被成功删除!两次操作几乎是一模一样的,这里我们把两个例子中步骤一的命令放在一起对比一下:

cat /etc/passwd | sed 's/^#.*$//g'  #例一
cat /etc/passwd | sed 's/^#.*$/ /g' #例二

应该很明显的看出问题所在了,在例一中我将注释行内容替换为了,而例二中我将注释行替换为了空格,而步骤二中的正则匹配^$只能匹配到,所以例二中的空白行就没有被删除,其实只是肉眼看起来一样,实质上例二中每行都是由空格组成;

  • 如果想要将例二这种空白页删除的话,可以借助于正则表达式中的\s(匹配任意的空白符),命令如下:
    cat Allen_qin/testpasswd | sed 's/^#.*$/ /g' | sed '/^\s*$/d' | less
    结果:
[16210504@izuf60jasqavbxb9efockpz ~]$ cat Allen_qin/testpasswd | sed 's/^#.*$/ /g' | sed '/^\s*$/d' | less
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
_networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false
_installassistant:*:25:25:Install Assistant:/var/empty:/usr/bin/false
_lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false
_postfix:*:27:27:Postfix Mail Server:/var/spool/postfix:/usr/bin/false
_scsd:*:31:31:Service Configuration Service:/var/empty:/usr/bin/false
_ces:*:32:32:Certificate Enrollment Service:/var/empty:/usr/bin/false
_appstore:*:33:33:Mac App Store Service:/var/empty:/usr/bin/false
_mcxalr:*:54:54:MCX AppLaunch:/var/empty:/usr/bin/false
_appleevents:*:55:55:AppleEvents Daemon:/var/empty:/usr/bin/false
......#后面内容省略

这样也就完成了空白行的删除工作了~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值