Linux文本处理
作为一名 Linux 研发人员,几乎每天都要面对文本处理场景。 因此 掌握文本处理套路 并 熟练运用文本处理命令 ,对于 提升工作效率 意义重大。
本文以一个实战例子抛砖引玉,介绍如何运用 grep 、 awk 、 sed 、 cut 等命令进行文本处理, 以 快速 完成原本很繁琐的操作。
背景
笔者开发机上有很多 Docker 镜像,现在需要删除名为 none 的那些:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
api-adapter v1 e9bc8e28af2a 3 hours ago 7.67MB
<none> <none> f0fa889be9e8 2 days ago 956MB
<none> <none> 257954316455 2 days ago 956MB
<none> <none> 99739acbfe7a 2 days ago 956MB
<none> <none> 52b10754a70c 2 days ago 956MB
<none> <none> 86878eefdd39 2 days ago 956MB
golang 1.10 0a19f4d16598 12 days ago 729MB
python 3 1e80caffd59e 12 days ago 923MB
如何操作呢?莫非手工一个个删除么?
$ docker image rm f0fa889be9e8
试想,如果有上百个这样的镜像待删,要搞到何年何月!但如何改进呢?
文本过滤
考虑先把名字为 none 的镜像从结果中过滤出来, grep 命令即可搞定:
$ docker images | grep none
<none> <none> f0fa889be9e8 2 days ago 956MB
<none> <none> 257954316455 2 days ago 956MB
<none> <none> 99739acbfe7a 2 days ago 956MB
<none> <none> 52b10754a70c 2 days ago 956MB
<none> <none> 86878eefdd39 2 days ago 956MB
字段提取
接着,将容器 ID 一列提取出来,这对 awk 来说简直是小儿科:
$ docker images | grep none | awk '{print $3}'
f0fa889be9e8
257954316455
99739acbfe7a
52b10754a70c
86878eefdd39
当然了,通过 cut 命令进行 字段切分 也可以得到相同的结果。 由于 cut 只能按单个字符进行切分,而原文本中的空格为多个,因此需要先进行 文本替换 。
文本替换
文本替换是 sed 命令擅长的事,下面将一个或多个空格替换成一个:
$ docker images | grep none | sed 's/ */ /g'
<none> <none> f0fa889be9e8 2 days ago 956MB
<none> <none> 257954316455 2 days ago 956MB
<none> <none> 99739acbfe7a 2 days ago 956MB
<none> <none> 52b10754a70c 2 days ago 956MB
<none> <none> 86878eefdd39 2 days ago 956MB
文本切分
接下来,使用 cut 命令对结果进行进一步切分并取出第三个字段:
$ docker images | grep none | sed 's/ */ /g' | cut -d ' ' -f 3
f0fa889be9e8
257954316455
99739acbfe7a
52b10754a70c
86878eefdd39
不错,我们得到与运用 awk 命令相同的结果。
批量删除
接下来,通过 xargs 批量删除镜像:
$ docker images | grep none | awk '{print $3}' | xargs docker image rm
Deleted: sha256:f0fa889be9e8f8369353a32e8cec17e9333cbeb581de5f78bf6875917d971bc9
Deleted: sha256:d301d0546b29b7daa55d29f29d9253664870fd83465aefe8b92ff6a7048d5612
...
在这个例子中, xargs 最终将执行以下命令:
$ docker image rm f0fa889be9e8 257954316455 99739acbfe7a 52b10754a70c 86878eefdd39
看到没有,所有不想要的镜像都删除干净了,而且只需要进行一次操作:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
api-adapter v1 e9bc8e28af2a 3 hours ago 7.67MB
golang 1.10 0a19f4d16598 12 days ago 729MB
python 3 1e80caffd59e 12 days ago 923MB
下面这个操作也是等价的:
$ docker images | grep none | sed 's/ */ /g' | cut -d ' ' -f 3 | xargs docker image rm

Linux文本处理的更多相关文章
- linux文本操作界面 vi面板如何复制一行
linux文本操作界面 vi面板如何复制一行 1)把光标移动到要复制的行上2)按yy3)把光标移动到要复制的位置4)按p 在vi里如何复制一行中间的几个字符?如果你要从光标处开始复制 4 个字符,则先 ...
- Linux文本流
Linux文本流 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 文本流 文件用于数据的存储,相当于一个个存储数据的房子.我们 ...
- 最优秀的5个Linux文本编辑器
from: http://article.yeeyan.org/view/169956/174836 作为不久前举办的比赛的一部分内容,我从那些选出他们最喜欢的Linux文本编辑器的极客读者们那获得了 ...
- linux文本处理常用指令总结
引子 作为一个偏爱windows的程序员,以前做文本处理的时候总是喜欢在windows下用notepad++等图形化工具处理,比如有时需要把linux服务器上一个文件进行一次全局字符串替换这样简单的操 ...
- Linux系列教程(十)——Linux文本编辑器vim
通过前面几篇博客我们终于结束了Linux常用命令的介绍,Linux常用命令主要包括以下: ①.Linux文件和目录处理命令 ②.Linux链接命令和权限管理命令 ③.Linux文件搜索命令 ④.Lin ...
- linux文本处理命令
linux文本处理命令 1.wc命令 基本介绍 文件的行统计.字符统计.字节统计 基本语法 wc [OPTION]... [FILE]... wc [OPTION]... --files0-f ...
- Linux文本编辑器vim
目录 1.vim 的工作模式 2.插入命令 3.定位命令 4.删除命令 5.复制和剪切命令 6.替换和取消命令 7.搜索和搜索替换命令 8.保存和退出命令 9.vim 高级操作 10.总结 通过前面几 ...
- [文件]Linux文本处理常用命令总结
转自:https://www.cnblogs.com/sheeva/p/6406285.html 引子 作为一个偏爱windows的程序员,以前做文本处理的时候总是喜欢在windows下用notepa ...
- Linux文本编辑器(九)
[教程主题]:Linux文本编辑器 [1]vi vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任 何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令. 由于对U ...
- linux文本分析利器awk
转 快速理解linux文本分析利器awk 原文链接 杜亦舒 性能与架构 awk是什么 如果工作中需要操作linux比较多,那么awk是非常值得学习的 awk是一个极其强大的文本分析工具,把文件逐行的读 ...
随机推荐
- BestCoder Round #93
这么快两天就过去了啊……昨天是April Fool’s Day,但绝对是我过的所有April Fool’s Day里最没意思的一个…… 估计再不写就要忘了……还是写写吧= = 说好7:00到机房,然而 ...
- BZOJ5068: 友好的生物(状压 贪心)
题意 题目链接 Sol 又是一道神仙题??.. 把绝对值拆开之后状压前面的符号?.. 下界显然,但是上界为啥是对的呀qwq.. #include<bits/stdc++.h> using ...
- 关于react-router-dom的一些记录
最近在做的新项目使用的技术栈是 React+AntDesign,本篇主要记录在实践过程中使用react-router-dom时遇到的一些方法的总结. 1.HashRouter和BrowserRoute ...
- ThreeJS文字作为纹理贴图
文字作为纹理贴图 From:http://www.linhongxu.com/post/view?id=222 这里可以使用canvas作为纹理贴图,Three为我们提供里CanvasTexture ...
- Linux 添加yum命令
第一步,国内的yum仓库 http://mirrors.163.com/centos/7/os/x86_64/Packages/ http://mirrors.aliyun.com/centos/7/ ...
- Spring Data MongoDB 模糊查询
Pattern pattern = Pattern.compile("^.*" + value + ".*$"); Query query = new Quer ...
- Android 自定义简易的方向盘操作控件
最近在做一款交互性较为复杂的APP,需要开发一个方向操作控件.最终用自定义控件做了一个简单的版本. 这里我准备了两张素材图,作为方向盘被点击和没被点击的背景图.下面看看自定义的Wheel类 publi ...
- Java基础之StringBuffer和StringBuilder的区别
StringBuffer是一个字符串的缓存类,属于一个容器,对于容器,我们可以进行增删改查. StringBuffer的容器长度是可变的,并且里面可以存放多种的数据类型.它跟其他容器,比如数组,是很不 ...
- C#-XML-数据传输
http://www.cnblogs.com/fengxuehuanlin/p/5631664.html 关于xml是属于一个比较重要的东西,在平时开发的过程中,这块内容最主要的是要掌握XML内容的读 ...
- java笔记--重定向输出流实现程序输出到日志
重定向输出流实现程序输出到日志 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3877248.html "谢谢-- 利用Sy ...