作为一名 Linux 研发人员,几乎每天都要面对文本处理场景。 因此 掌握文本处理套路熟练运用文本处理命令 ,对于 提升工作效率 意义重大。

本文以一个实战例子抛砖引玉,介绍如何运用 grepawksedcut 等命令进行文本处理, 以 快速 完成原本很繁琐的操作。

背景

笔者开发机上有很多 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文本处理的更多相关文章

  1. linux文本操作界面 vi面板如何复制一行

    linux文本操作界面 vi面板如何复制一行 1)把光标移动到要复制的行上2)按yy3)把光标移动到要复制的位置4)按p 在vi里如何复制一行中间的几个字符?如果你要从光标处开始复制 4 个字符,则先 ...

  2. Linux文本流

    Linux文本流   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 文本流 文件用于数据的存储,相当于一个个存储数据的房子.我们 ...

  3. 最优秀的5个Linux文本编辑器

    from: http://article.yeeyan.org/view/169956/174836 作为不久前举办的比赛的一部分内容,我从那些选出他们最喜欢的Linux文本编辑器的极客读者们那获得了 ...

  4. linux文本处理常用指令总结

    引子 作为一个偏爱windows的程序员,以前做文本处理的时候总是喜欢在windows下用notepad++等图形化工具处理,比如有时需要把linux服务器上一个文件进行一次全局字符串替换这样简单的操 ...

  5. Linux系列教程(十)——Linux文本编辑器vim

    通过前面几篇博客我们终于结束了Linux常用命令的介绍,Linux常用命令主要包括以下: ①.Linux文件和目录处理命令 ②.Linux链接命令和权限管理命令 ③.Linux文件搜索命令 ④.Lin ...

  6. linux文本处理命令

    linux文本处理命令 1.wc命令 基本介绍 文件的行统计.字符统计.字节统计 基本语法 wc  [OPTION]...  [FILE]... wc  [OPTION]...  --files0-f ...

  7. Linux文本编辑器vim

    目录 1.vim 的工作模式 2.插入命令 3.定位命令 4.删除命令 5.复制和剪切命令 6.替换和取消命令 7.搜索和搜索替换命令 8.保存和退出命令 9.vim 高级操作 10.总结 通过前面几 ...

  8. [文件]Linux文本处理常用命令总结

    转自:https://www.cnblogs.com/sheeva/p/6406285.html 引子 作为一个偏爱windows的程序员,以前做文本处理的时候总是喜欢在windows下用notepa ...

  9. Linux文本编辑器(九)

    [教程主题]:Linux文本编辑器 [1]vi vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任 何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令. 由于对U ...

  10. linux文本分析利器awk

    转 快速理解linux文本分析利器awk 原文链接 杜亦舒 性能与架构 awk是什么 如果工作中需要操作linux比较多,那么awk是非常值得学习的 awk是一个极其强大的文本分析工具,把文件逐行的读 ...

随机推荐

  1. 01.css选择器-->类选择器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Vue.js小案例(2)

    即时搜索 这个例子主要应用了vue.js的自定义过滤器,可以通过Vue.filter()注册一个全局过滤器,具体用法可以参考这里,vue.js也提供了一些内置过滤器. CSS代码: [v-cloak] ...

  3. js如何获取response header信息

    信息转自网上 普通的请求JS无法获取,只有ajax请求才能获取到. $.ajax({ type: 'HEAD', // 获取头信息,type=HEAD即可 url : window.location. ...

  4. CentOS6.5(4)----宿主机无法访问虚拟机中的web服务解决方案

    宿主机无法访问虚拟机中的web服务 在Windows7宿主机中的VMware虚拟机中安装了CentOS6.5操作系统,并且基于Nginx搭建了Web服务器,网页刚刚搭建好的时候,通过宿主机的浏览器可以 ...

  5. How to fix Mysql table crashes

    Whenever you enconter this: Please use mysql_upgrade to fix this error. or using  mysql_upgrade -u r ...

  6. linux 加jre环境变量

    1.vi /etc/profile 2.未行添加 export JAVA_HOME=/usr/local/java export CLASSPATH=.:$JAVA_HOME/lib/tools.ja ...

  7. order by 多条件查询 case when

    场景:在按照条件查询后,排序按照不同的条件排序,以及同一个条件 正序和倒序排序.可以考虑使用. 遇到的排序条件:按照直播的状态,根据条件排序.直播的状态包括:直播.置顶.预告.回放.过期预告.排序条件 ...

  8. spring boot(2)-@SpringBootApplication详解

    pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...

  9. Python实例---游戏人生[类的学习]

    # -*- coding:utf-8 -*- # ##################### 定义实现功能的类 ##################### class Person: def __in ...

  10. Java实例---flappy-bird实例[最终版]

    代码分析 解析版: Java实例---flappy-bird实例解析 完整版: TestBirdFly.java package testfly; import java.awt.Color; imp ...