准备工作:

  先简单了解grep,sed和awk功能  

  1) grep 显示匹配特定模式的内容

    grep -v 'boy' test.txt 过滤掉test.txt文件的boy,显示其余内容

    grep 'boy' test.txt 显示test.txt文件中,和boy匹配的内容

    -E 同时过滤多个"a|b"

    -i 不区分大小写

    --color=auto 设置颜色

  2)sed 取各种内容,以行为单位取内容

    -n取消默认输出

    p=print

    d=delete 

  3)awk 取列

    -F 指定分割符 如对“I am a student” 以空格为分割符,其将被分为4列,awk里有参数可以去任意列

    NF 表示当前行记录域或列的个数

    NR 显示当前记录号或行号

    $1第一列 $2第二列 $0整行 $NF 最后一列        

案例一:如何过滤出em1的ip地址

[zhaohuizhen@localhost Test]$ ifconfig em1
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.21.63.156 netmask 255.255.255.0 broadcast 10.21.63.255
inet6 fe80::b283:feff:fed9:6a9a prefixlen 64 scopeid 0x20<link>
ether b0:83:fe:d9:6a:9a txqueuelen 1000 (Ethernet)
RX packets 13908772 bytes 4072069839 (3.7 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 982482 bytes 86260856 (82.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 40

步骤一:

  首先应该过滤出第二行inet 10.21.63.156 netmask 255.255.255.0 broadcast 10.21.63.255内容

  方法一:grep命令  

    [zhaohuizhen@localhost Test]$ ifconfig em1 | grep 'inet '
      inet 10.21.63.156 netmask 255.255.255.0 broadcast 10.21.63.255

  方法二:用sed命令

    [zhaohuizhen@localhost Test]$ ifconfig em1 | sed -n '2p'
      inet 10.21.63.156 netmask 255.255.255.0 broadcast 10.21.63.255

  方法三:用awk命令

    [zhaohuizhen@localhost Test]$ ifconfig em1 | awk NR==2

      inet 10.21.63.156 netmask 255.255.255.0 broadcast 10.21.63.255

  方法四:用head,tail命令

    [zhaohuizhen@localhost Test]$ ifconfig em1 | head -2 | tail -1
      inet 10.21.63.156 netmask 255.255.255.0 broadcast 10.21.63.255

步骤二:

  过滤出第二行后,在过滤出ip地址

  方法一:用cut命令   

    [zhaohuizhen@localhost Test]$ ifconfig em1 | sed -n '2p' | cut -c 14-25
      10.21.63.156

    [zhaohuizhen@localhost Test]$ ifconfig em1 | grep 'inet ' | cut -d" " -f10
      10.21.63.156

  方法二:用awk命令

    [zhaohuizhen@localhost Test]$ ifconfig em1 | grep 'inet ' | awk -F '[ ]+' '{print $3}'
      10.21.63.156

    用awk命令可以直接处理第二行,不用先将其过滤出来    

    [zhaohuizhen@localhost Test]$ ifconfig em1 | awk -F '[ ]+' 'NR==2 {print $3}'
      10.21.63.156

  方法三:用sed命令

    [zhaohuizhen@localhost Test]$ ifconfig em1 | sed -n '/inet /p' | sed 's#^.*et ##g' | sed 's# net.*$##g'
      10.21.63.156

    此处用到了正则表达式(见http://www.cnblogs.com/ZGreMount/p/7656365.html),匹配的目标前面的字符串一般以^.*开头,代表以任意字符开头,结尾写上要匹配的字符前面的几个字符,        如"^.*addr "就匹配"                              inet addr ",而处理的目标后的内容则是开头写上要匹配字符后几个字符,加上以.*$。如,“ Bcast:.*$”就匹配“ Bcast:10.0.0.254 Mask:255.255.255.”

  注:sed小括号分组功能

    sed ‘s/********/......./标签’  #斜线可以被其它字符替换

    前两条斜线中间部分内容********,可以使用正则表达式,后两条斜线中间内容.......不能使用正则表达式。

    ()是分组,在前面部分使用()括起来的内容,在后面部分可以使用\1调用前面括号内内容。

    如果有多个括号,那么依次是\1,\2,\3,以此类推。

    例如,直接取em1ip地址,不先过滤出第二行

    [zhaohuizhen@localhost Test]$ ifconfig em1 | sed -n 's#^.*inet \(.*\) net.*$#\1#gp'
      10.21.63.156

    直接取出ip地址和子网掩码

    [zhaohuizhen@localhost Test]$ ifconfig em1 | sed -n 's#^.*inet \(.*\) n.*k \(.*\) bro.*$#\1 \2#gp'
      10.21.63.156 255.255.255.0

案例二:输出文件a对应权限664

    [zhaohuizhen@localhost Test]$ ll a
      -rw-rw-r--. 1 zhaohuizhen zhaohuizhen 98 Oct 12 20:24 a

    方法一:用awk命令

    [zhaohuizhen@localhost Test]$ ll a | awk '{print $1}'|tr rwx- 4210|awk -F "" '{print $2+$3+$4 $5+$6+$7 $8+$9+$10}'
      664

    解析:

      1)ll a 长格式显示文件a    

      [zhaohuizhen@localhost Test]$ ll a
        -rw-rw-r--. 1 zhaohuizhen zhaohuizhen 98 Oct 12 20:24 a

      2)用awk命令,以空格为分隔符,取出第一列

      [zhaohuizhen@localhost Test]$ ll a | awk '{print $1}'
        -rw-rw-r--.

      3)用tr命令将rwx- 替换为4210

      [zhaohuizhen@localhost Test]$ ll a | awk '{print $1}'|tr rwx- 4210
        0420420400.

      4)用awk将上面的结果分割,然后相加得出结果

      [zhaohuizhen@localhost Test]$ ll a | awk '{print $1}'|tr rwx- 4210|awk -F "" '{print $2+$3+$4 $5+$6+$7 $8+$9+$10}'
        664

    方法二:用stat命令

      [zhaohuizhen@localhost Test]$ stat a
      File: ‘a’
      Size: 98 Blocks: 8 IO Block: 4096 regular file
      Device: fd02h/64770d Inode: 203491 Links: 1
      Access: (0664/-rw-rw-r--) Uid: ( 1002/zhaohuizhen) Gid: ( 1002/zhaohuizhen)
      Context: unconfined_u:object_r:user_home_t:s0
      Access: 2017-10-14 09:20:34.337529787 +0800
      Modify: 2017-10-12 20:24:27.512609708 +0800
      Change: 2017-10-12 20:24:27.536609708 +0800
      Birth: -

    1)命令stat a结果包含文件a对应权限644,可以用前面的方法直接过滤出来

    [zhaohuizhen@localhost Test]$ stat a | awk -F '[(/]' 'NR==4 {print $2}'
      0664

    2)stat命令包含需要结果,考虑stat命令是否有参数可以直接获得我们需要的结果

    [zhaohuizhen@localhost Test]$ stat -c %a a
      664

案例三:输出文件a内容,不带空行,文件a内容如下:

    [zhaohuizhen@localhost Test]$ cat a
    "hello,this is a test"
    I am a studeng My QQ is 1534612574

    computer

    book

    river
    tree

    man
    computer

    book
    river
    tree
    man

  方法一:grep命令

    [zhaohuizhen@localhost Test]$ grep -v '^$' a
    "hello,this is a test"
    I am a studeng My QQ is 1534612574
    computer
    book
    river
    tree
    man
    computer
    book
    river
    tree
    man

    注释:-v 即排除;^$,开头和结尾间没有任何东西,即空行

  方法二:用sed命令

[zhaohuizhen@localhost Test]$ sed '/^$/d' a
"hello,this is a test"
I am a studeng My QQ is 1534612574
computer
book
river
tree
man
computer
book
river
tree
man

注释:^$代表空行,d即delete

方法三:用awk命令

[zhaohuizhen@localhost Test]$ awk /[^$]/ a
"hello,this is a test"
I am a studeng My QQ is 1534612574
computer
book
river
tree
man
computer
book
river
tree
man

    注释:^$代表空行,放在[]中代表非,即不匹配空行

    

    

  

强大的grep,sed和awk--用案例来讲解的更多相关文章

  1. linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)

    本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www. ...

  2. grep, sed 与 awk 补补课,到底怎么用!

    grep, sed 与 awk 相当有用 ! gerp 查找, sed 编辑, awk 根据内容分析并处理. awk(关键字:分析&处理) 一行一行的分析处理 awk '条件类型1{动作1}条 ...

  3. 日志分析查看——grep,sed,sort,awk运用

    概述 我们日常应用中都离不开日志.可以说日志是我们在排查问题的一个重要依据.但是日志并不是写了就好了,当你想查看日志的时候,你会发现线上日志堆积的长度已经超越了你一行行浏览的耐性的极限了.于是,很有必 ...

  4. 正则表达式学习之grep,sed和awk

    正则表达式是用于描述字符排列和匹配模式的一种语法,它主要用于字符串的模式分割.匹配.查找以及替换操作. 描述一个正则表达式需要字符类.数量限定符.位置限定符.规定一些特殊语法表示字符类,数量限定符和位 ...

  5. 使用方便 正则表达式grep,sed,awk(一)

    一些无稽之谈: 对于正则表达式,永远似了解不明白,看到一些代码,脚本定期,awk,sed.心里总有点虚.主要是记不住.平时又没怎么用,也就没总结了. 如今有空,决定总结一下,顺便克服一下看到shell ...

  6. 【Linux】 字符串和文本处理工具 grep & sed & awk

    Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...

  7. Linux文本三剑客超详细教程---grep、sed、awk

    awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...

  8. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  9. 5_find grep sed awk 详解

    find :查找文件系统中指定的文件.可以按文件名(-name)  权限(-perm) 归属人 查找. find   要查找文件的路径   表达式 *通配符  可以添加在文件名的任意位置 常用的例子( ...

随机推荐

  1. 移动端图片放大滑动查看-插件photoswipe的使用

    最近在开发项目的时候,遇到一个需求,需要移动端实现放大查看图片的功能,然后我就在网上搜索了一下资料,看到了photoswipe这个插件,后来试了试,确实挺好用的,它可以实现手势放大缩小查看图片,左右滑 ...

  2. CloseableHttpClient 源码

    public abstract class CloseableHttpClient implements HttpClient, Closeable { private final Log log = ...

  3. html标签缺省(自带)样式大全

    html标签默认样式整理 作者:佚名  来源:互联网 时间:07-30 16:54:48 文为大家整理了html标签默认样式属性及浏览器默认样式等等,喜欢css布局的朋友们可以学下,希望对大家有所帮助 ...

  4. [我所理解的REST] 3.基于网络应用的架构

    上篇中解释到什么是架构风格和应该以怎样的视角来理解REST(Web的架构风格).本篇来介绍一组自洽的术语,用它来描述和解释软件架构:以及列举下对于基于网络的应用来说,哪些点是需要我们重点关注的. 1 ...

  5. Js函数初学者练习(一)switch-case结构实现计算器。

      前  言 JRedu 给大家介绍一点JS函数的练习题希望初学者多做一些练习能够更好的掌握JS的函数,以及能够提升大家的逻辑思维.(我也是个渣渣希望路过的大神多提建议或意见) 希望能够对大家有所帮助 ...

  6. java四则运算生成器

    题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除 ...

  7. 【1414软工助教】团队作业9——测试与发布(Beta版本) 得分榜

    题目 团队作业9--测试与发布(Beta版本) 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目2:单元测试 团队作业1:团队展示 团队作业2:需求分析& ...

  8. 201521123036 《Java程序设计》第6周学习总结

    本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 1.2 可选:使用常规方法总结其他上课内容. 对象克隆:Clon ...

  9. 201521123119《Java程序设计》第6周学习总结

    1. 本周学习总结 2. 书面作业 Q1.clone方法 Q1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 只能在本类内部或者和 ...

  10. 201521123049 《JAVA程序设计》 第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. ###1.类型转换(cast):是将两种不同类型的变量进行转换,但不能随意强制转换,随意强制 ...