程序员

Shell入门_去掉空行的几种方法

作者:admin 2021-05-03 我要评论

昨天听到一个很有意思的说法:脚本猛于老虎。 我非常认可这种说法,这里面有2个意思: 脚本的功能很强大,可以做很多事情,虽然不是最好的方式; 脚本很危险,很...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

 

昨天听到一个很有意思的说法:脚本猛于老虎。

我非常认可这种说法,这里面有2个意思:

  1.  脚本的功能很强大,可以做很多事情,虽然不是最好的方式;
  2.  脚本很危险,很容易出错;

或许还能加一句:伴君如伴虎...

我本人非常喜欢 shell 脚本,因为它做事太简单粗暴了,适合用来实现 v0.01 版本原型,我甚至认为它很好地 辅助了软件设计。

接下来是主题,做嵌入式软件开发偶尔要收集和分析 log,有时为了格式化输出需要删除掉多余的空白行,我挑选了几个 简短且容易理解的 方法分享给大家。

1. grep

  1. $ grep -v '^$' file 

-v 用于输出不匹配的内容:

  1. $ man grep  
  2.  Matching Control  
  3.  -v, --invert-match  
  4.               Invert the sense of matching, to select non-matching lines. 

通配符 '^里的用于表示字符串开始, 用于表示字符串结束。

2. sed

  1. $ sed '/^$/d' file 

sed 的全名是 “stream editor”,即流编辑器,是一个使用简单紧凑的编程语言来解析和转换文本超强实用程序。

^$ 用于匹配空白行,d 则是 sed 的其中一个命令,用于删除匹配项:

  1. $ man sed  
  2. COMMAND SYNOPSIS  
  3.     ...  
  4.     d      Delete pattern space.  Start next cycle.  
  5.     ... 

3. awk

  1. $ awk '!/^$/' file 

补充知识:

awk (其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母) 是一种用于处理文本的编程语言。它是一个优良的文本处理工具,工作时它会扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。

awk 程序是由一系列模式--动作对组成的:

  1. pattern { action } 

回到我们的需求,^$ 用于匹配空白行,!则用来取反,从而找出非空白行,awk 的默认 action 就是 print,所以我们连 print 都不写了。

4. tr

  1. $ cat in.txt | tr -s '\n' 

tr 是 translate 的缩写,用于替换或删除输入数据集中特定字符。

-s 用于将其输出中相同相邻字符的序列压缩为单个字符:

  1. $ man tr  
  2. DESCRIPTION  
  3.     -s, --squeeze-repeats 
  4.                replace  each  sequence  of a repeated character that is listed in the last specified SET, with a single occurrence of  
  5.               that character 

5. vi

  1. $ vi file  
  2. :g/^$/d 

vi 是一种模式编辑器。不同的按钮和键击可以更改不同的“模式”。

在命令模式下,g 指定全局搜索,^$ 用于匹配空白行,d 表示删除匹配项。

到此,已经有足够多的方法删除空白行了。

后续会写更多关于 shell 脚本的文章,内容包括但不限于:

  1.  shell 脚本基础知识;
  2.  shell 脚本小技巧;
  3.  shell 脚本编程规范;
  4.  分析 shell 脚本编写的开源项目;

你喜欢 shell 吗?大家有喜欢的文章和书籍麻烦也分享给我,谢谢~


本文转载自网络,原文链接:https://mp.weixin.qq.com/s/54Zxs6j0_JKT8yZMdn6OOA

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 高频考点之六大进程通信机制

    高频考点之六大进程通信机制

  • 聊聊Git版本控制工具使用说明和规范

    聊聊Git版本控制工具使用说明和规范

  • 微软计划合并 Windows10 累积和服务堆

    微软计划合并 Windows10 累积和服务堆

  • Windows10这功能已如同残废!教你如何

    Windows10这功能已如同残废!教你如何

腾讯云代理商
海外云服务器