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是一个极其强大的文本分析工具,把文件逐行的读 ...
随机推荐
- bootstrap fileinput +springmvc图片上传-krajee
引入的文件 <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-fileinput/4.4.9/css/filei ...
- localStorage跟cookie的使用
最近做了记住密码功能,用localStorage跟cookie都尝试用了一下,感觉都挺好哈,很方便,特此记录 html代码: <input type="text" id=&q ...
- 12 步 30 分钟,完成用户管理的 CURD 应用 (react+dva+antd)
Getting Started https://github.com/dvajs/dva/blob/master/docs/GettingStarted.md -------------------- ...
- Setting up a Single Node Cluster Hadoop on Ubuntu/Debian
Hadoop: Setting up a Single Node Cluster. Hadoop: Setting up a Single Node Cluster. Purpose Prerequi ...
- CSS background 属性详解
CSS background Property 语法: background: bg-color bg-image position/bg-size bg-repeat bg-origin bg-cl ...
- Java 设计模式(三)-单例模式(Singleton Pattern)
1 概念定义 1.1 定义 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 1.2 类型 创建类模式 1.3 难点 1)多个虚拟机 当系统中的单例类被拷贝运行在多 ...
- Windows server 2008系统各类版本的优缺点比较,Windows2008系统标准版 企业版 数据中心版 WEB版等
大家都知道Windows Server 2008 发行了多种版本,以支持各种规模的企业对服务器不断变化的需求.Windows Server 2008 有 5 种不同版本,另外还有三个不支持 Windo ...
- String str = "1,2,3,4,5,6" 如何将这个字符串转换成int数组
String str = "1,2,3,4,5,6"; string[] strS = str.Split(','); int[] num = new int[strS.Lengt ...
- 打通版微社区(1):PHP环境部署 for DZX3.2
写在前面:本文参考了http://blog.sina.com.cn/s/blog_513be2630101linz.html非常感谢博主此文对我此次操作帮助很大.PHP的windows部署方案主要分为 ...
- Linux 下Discuz论坛的搭建
Discuz论坛的搭建[基于LNMP环境搭建成功后] ##创建BBS数据库在本地/远程服务器 mysql -uroot -proot create database bbs; show databas ...