zoukankan      html  css  js  c++  java
  • 读书笔记--find、sed、awk工具的使用

    最近在写shell脚本,主要工作就是解析配置文件,那么学习sed与awk就在所难免了,另外还系统的看了find命令的使用,现在就将这些成果汇总起来,以便今后参考:

    ------------------------------------------------------------------

    第一部分:find

      1)name选项

      find ~ -name “*.txt” –print

      find . –name “[A-Z]*” –print

      2)perm选项

      find . –perm 755 -print

      3)按更改时间查找

      find / -mtime -5 –print     //更改时间在五日以内

      find / -mtime +3 –print    //更改时间在三日之前

      4)type选项

      find /etc –type d –print    //查找/etc目录下所有的目录

      find /etc –type l –print     //查找/etc目录下所有的符号链接文件

      5)使用exec或ok

      find . –type f –exec ls –l {} ; //注意{}和;之间有空格

      find . -name “*.log” –mtime +5 -exec rm {} ;

    第二部分:sed

      sed是非交互文本流编辑器,使用sed可以从文件和字符串中抽取所需信息。

      1)打印范围

      sed –n ‘1,3p’ sed.txt > sed.tmp

      sed –n ‘1,$p’ sed.txt > sed.tmp

      2)模式查询

      sed –n ‘/should/p’ sed.txt //查找should的行

      sed –n ‘/should/=’ sed.txt //输出匹配的行号

      3)特殊字符查询

      sed –n ‘/./’p sed.txt        //查找有.的行

      4)删除文本

      sed ‘1,3d’ sed.txt

      sed ‘/should/d’ sed.txt

      5)替换文本

      sed ‘s/PS/ps/’ sed.txt       //替换每行第一个匹配

      sed ‘s/PS/ps/g’ sed.txt           //全文替换

      sed ‘1,3 s/should/SHOULD/g’ sed.txt         //指定范围替换

      sed ‘1 s/should/SHOULD/g’ sed.txt      //指定行替换

      6)sed脚本文件

      I)含sed命令的脚本

      $cat append.sed

      #!/bin/sed –f

      /should/ a

      Just a test.

      $chmod +x append.sed

      $./append.sed sed.txt

      II)不含sed命令脚本

      $cat append.sed

      /should/ a

      Just a test.

      $chmod +x append.sed

      $sed –f append.sed sed.txt

    第三部分:awk

          awk 是一种编程语言,对文本和数据进行处理,支持正则表达式,突出特点是对文本列的操作。

      1)常见操作

      awk ‘{print $1,$3}’ tmp.txt

      awk –F ‘:’ ‘{print $1”|”$3}’ tmp.txt  //以冒号作为域分割符并且输出的分割符为|

      2)打印记录

      awk ‘BEGIN {print “Begin   -----------------”}

      {print $0}’ tmp.txt //打印头

      awk ‘BEGIN {print “Begin   -----------------”}

      {print $0}

      END {print” ----------------- End”}’ tmp.txt    //打印头尾

      3)条件运算符

      awk ‘{if ($1~/tomy/) print $0}’ tmp.txt //匹配文本域1为tomy的记录

      awk ‘$2==”30” {print $1,”age is 30.”}’ tmp.txt   //精确匹配

      4)利用正则表达式

      awk ‘/[Gg]reen/’ tmp.txt    //匹配Green或者green

      awk ‘$4~/[Gg]reen/’ tmp.txt

      awk ‘$4~/([Gg]reen|[Rr]ed)/’ tmp.txt    //或关系匹配

      5)使用内置变量

      awk ‘{print NF,NR,$0}

      END {print FILENAME}’ tmp.txt //NF为列数,NR为行号

      6)使用内置字符串函数

      awk ‘gsub (/30/,thirty) {print $0}’ tmp.txt    //把有30的行中的30改为thirty

      awk ‘BEGIN {print split(“123#456#789”,m_array,”#”)}’  //split返回数组m_array的下标数3,m_array取值:m_array[1]为123,m_array[2]为456,m_array[3]为789

      7)输出函数printf

      awk ‘{printf “%-10s---%s ”,$1,$3}’ tmp.txt      //类似C语言printf函数

    ------------------------------------------------------------------

  • 相关阅读:
    mysql5.7 linux安装参考
    谈谈微服务中的 API 网关(API Gateway)
    十大Intellij IDEA快捷键
    SqoopFlume、Flume、HDFS之间比较
    PostgreSQL-存储过程(一)基础篇
    spark调优篇-oom 优化(汇总)
    spark调优篇-数据倾斜(汇总)
    spark调优篇-Spark ON Yarn 内存管理(汇总)
    spark异常篇-OutOfMemory:GC overhead limit exceeded
    spark异常篇-Removing executor 5 with no recent heartbeats: 120504 ms exceeds timeout 120000 ms 可能的解决方案
  • 原文地址:https://www.cnblogs.com/yangtze736-2013-3-6/p/3150580.html
Copyright © 2011-2022 走看看