你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

shell 脚本——删除掉多余的空白行

[复制链接]
gaosmile 发布时间:2021-2-26 15:00
昨天听到一个很有意思的说法:脚本猛于老虎
我非常认可这种说法,这里面有2个意思:
  • 脚本的功能很强大,可以做很多事情,虽然不是最好的方式;
  • 脚本很危险,很容易出错;
或许还能加一句:伴君如伴虎...
我本人非常喜欢 shell 脚本,因为它做事太简单粗暴了,适合用来实现 v0.01 版本原型,我甚至认为它很好地 辅助了软件设计
接下来是主题,做嵌入式软件开发偶尔要收集和分析 log,有时为了格式化输出需要删除掉多余的空白行,我挑选了几个 简短且容易理解的 方法分享给大家。
1. grep$ grep -v '^$' file
-v 用于输出不匹配的内容:
$ man grep
Matching Control
-v, --invert-match
              Invert the sense of matching, to select non-matching lines.
通配符 '^里的用于表示字符串开始, 用于表示字符串结束。


2. sed
$ sed '/^$/d' file
sed 的全名是 “stream editor”,即流编辑器,是一个使用简单紧凑的编程语言来解析和转换文本超强实用程序。
^$ 用于匹配空白行,d 则是 sed 的其中一个命令,用于删除匹配项:
$ man sed
COMMAND SYNOPSIS
    ...
    d      Delete pattern space.  Start next cycle.
    ...
3. awk
$ awk '!/^$/' file
补充知识:
awk (其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母) 是一种用于处理文本的编程语言。它是一个优良的文本处理工具,工作时它会扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
awk 程序是由一系列模式--动作对组成的:
pattern { action }
回到我们的需求,^$ 用于匹配空白行,!则用来取反,从而找出非空白行,awk 的默认 action 就是 print,所以我们连 print 都不写了。
4. tr
$ cat in.txt | tr -s '\n'
tr 是 translate 的缩写,用于替换或删除输入数据集中特定字符。
-s 用于将其输出中相同相邻字符的序列压缩为单个字符:
$ man tr
DESCRIPTION
    -s, --squeeze-repeats
              replace  each  sequence  of a repeated character that is listed in the last specified SET, with a single occurrence of
              that character
5. vi
$ vi file
:g/^$/d
vi 是一种模式编辑器。不同的按钮和键击可以更改不同的“模式”。
在命令模式下,g 指定全局搜索,^$ 用于匹配空白行,d 表示删除匹配项。
到此,已经有足够多的方法删除空白行了。
后续会写更多关于 shell 脚本的文章,内容包括但不限于:
  • shell 脚本基础知识;
  • shell 脚本小技巧;
  • shell 脚本编程规范;
  • 分析 shell 脚本编写的开源项目;
你喜欢 shell 吗?大家有喜欢的文章和书籍麻烦也分享给我,谢谢~
相关参考
[1] sed wiki: https://zh.wikipedia.org/wiki/Sed
[2] awk wiki: https://zh.wikipedia.org/wiki/AWK


收藏 评论0 发布时间:2021-2-26 15:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版