zoukankan      html  css  js  c++  java
  • 文本提取、分析和修改工具

    一、提取文本工具:

      1.文件内容:less和cat

        less通过n/N进行查找到搜索的内容

      2.文本摘要:head和tail

        head使用-n显示头部行数

        tail也可以使用-n显示尾部行数,具体用法如下:#cat test.txt | tail -n3或者#cat test.txt | heal -n4

        可以用来截取某个文件里面第五行之后的7行内容如:#cat test.xtx | head -n 11 | tail -n 7

      3.通过列提取:cut

      4.通过关键字提取:grep

        打印出模式匹配到的文件或者标准输入行

          $grep 'john' /etc/passwd

          $date --help | grep year

          。使用-i查询时不区分大小写

          。使用-n打印匹配到的行号

          。使用-v打印不包含匹配模式的行

          。使用-AX包括在每次匹配之后X行

          。Use -BX包括每次匹配之前X行

          使用vim可以指定打开对应文件的行号,如:vim +34  /etc/passwd 进入/etc/passwd文件中的第34行

          如过滤文件中配置有效的文件,即取出空行和#的行,如下:#cat test.txt | grep ^# -v | grep -v ^$等同于命令:

          #cat test.txt | grep -Ev   '^(#|$)'=#cat test.txt | grep -Ev   '(^#|^$)'。

          以下图片为修改文件的操作:

          

      通过列提出文本cut

        显示文件指定的列或者标准输入的数据

        .$cut -d :-f1 /etc/passwd  //提取/etc/passwd 文件中分隔符按照":“,第一个字段的内容

        .$grep root /etc/passwd | cut -d:-f7

        使用-d指定列的分隔符(默认为TAB)

        使用-f指定要打印的列

        使用-c按字符切分

          .cut -c2-5 /usr/share/dict/words

        eg:通过以下方式获取网卡里面的ip地址:

      

        eg:通过以下方式获取字符串中5-12为字符:

      

       排序文本sort

      .排序文本到标准输出-未修改源文件

      .$sort [options] file(s)

      .命令选项

        。-r执行反响(降序)排序

        。-n按数字执行排序

        。-f忽略字符串中的大小写

        。-u(唯一)移除输出中重复的行

        。-t c使用c作为字符分隔符

        。-k X对字段X排序

       。能使用多次

        eg:使用sort命令对/etc/passwd文件第三列进行排序:

        #cat /etc/passwd | sort -t : -k 3 -n

      去除重复的行:sort和uniq

      sort -u:从输入中移除重复的行

      uniq:从输入中移除重复相邻行

        .使用-c来统计重复的次数

        .最好与sort一起使用:$sort userlist.txt | uniq -c (先排序然后使用uniq统计次数)

      分析文本的工具:

      .文本统计:wc

        收集文本统计信息wc(单词统计)

        。统计单词,行,字节和字符

        。能使用在一个文件后者标准输入上

          。$cat  /etc/passwd | wc [-w|-l|-c]

          。使用-l作为行数统计

          。使用-w作为单词统计

          。使用-c作为字节统计

          。使用-m作为字符统计(不显示)

      .文本排序:sort

      .对比文件:diff和patch

        对比两个文件找出差异$diff foo.conf-broken foo.conf-works(对比结果<箭头是foo.con-broken,>箭头是foo.conf-works文件内容,其中6c6中c表示被修改了5d4

        复制文件所做的改变patch

        diff输出保存到一个文件里,称呼其为“补丁文件”

          。使用-u作为“统一”格式的diff,适用于补丁文件

        patch复制所做的改变到其他文件中(小心使用!)

          。使用-b自动备份欲改变的文件

          $diff -u foo.conf-broken foo.conf-works >foo.patch   //比较foo.conf-broken(v1.0版本)与foo.conf-works(v2.0版本)对比,将结果重定向到foo.patch中

          $patch -b foo.conf-broken <foo.patch  //将补丁包foo.patch文件写入到foo.conf-broken文件中,实现版本v1.0到2.0升级,之后可以比对foo.conf-broken和foo.conf-works发现此时两个文件内容已经相同

      .拼写检查:aspell

      操作文本的工具tr和sed: 

    .修改(转换)字符:tr
        。将一些列字符转化成对应的另外一系列字符
        。只从标准输入中读取数据
            $tr 'a-z' 'A-Z' <lowercase.txt
    .修改字符串:sed
        。流编辑器
        。对文本流做查询/替换操作
        。通常不会修改原文件
        。使用-i.bak来备份并修改原文件
    实例:
      。用引号括起查询和替换指令!
      。sed寻址:
        #sed 's/dog/cat/g' pets
        #sed '1,50s/dog/cat/g' pets
        #sed '/digby/,/duncan/s/dog/cat/g' pets
      。多个sed指令
        sed -e 's/dog/cat/' -e 's/hi/lo/' pets
        sed -f myedits pets //这里-f是调用已经写好替换规则的myedits的文件,pets是需要使用该规则的文件名
      sed格式(下面的/、#、@为分界定位符): sed ‘s/查找内容1 /替换内容2/'用于没有/的替换
          sed 's#  #  #'
          sed 's@  @  @'
      sed修饰符:g(global)全局;i(case-insensitive)无视大小写;d(delete)
    区间替换:sed m,n s/  /  /    //使用m,n,m为起始位置,n为结束为止,来实现区间查找替换。
        #cat ./iptables.lst | sed '87,93s/172.24./10.0./'  //将iptables.lst文件中数字87到93的区间内容为172.24.替换为10.0.
        #cat animal.txt | sed '/cat/,/dog/s/$/ <----/'  猫狗游戏,在animal.txt文件中找到猫,知道找到狗这个区间的$结尾符号替换成<----,其他不替换。
        -e开关可以讲多个表达式合并起来,实现多个替换。
        

        以上命令中的方法有多个替换语句,可以使用-f参数文件来实现,调用的时候使用sed -f 被调用的文件

     
  • 相关阅读:
    浅谈软件测试流程
    在9个点上画10条直线,要求每条直线上至少有三个点
    word中快速插入时间
    多核处理器时,__rdtsc()的使用编程珠玑第一章
    解决 error LNK2019: 无法解析的外部符号 问题
    修改IE代理
    overload重载 override覆盖 overwirte重写
    几个题目
    12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。
    在link.c中已经include了头文件了,为什么使用ld还无法识别mian和printf?
  • 原文地址:https://www.cnblogs.com/hongjinping/p/12995438.html
Copyright © 2011-2022 走看看