10linux文本处理工具与重定向

一、重定向

        1、标准输入和输出

            •程序:指令+数据

                读入数据:Input 输出数据:Output

            •  打开的文件都有一个fd: file descriptor (文件描述符)

            •  Linux给程序提供三种I/O设备

            –  标准输入(STDIN)-0 默认接受来自键盘的输入

            –  标准输出(STDOUT)-1 默认输出到终端窗口

            –  标准错误(STDERR)-2 默认输出到终端窗口

            •  I/O重定向:改变默认位置

2、把输出和错误重新定向到文件

        STDOUT和STDERR可以被重定向到文件

        命令   操作符号  文件名

        支持的操作符号包括:

        >  把STDOUT重定向到文件

        2> 把STDERR重定向到文件

        &>  把所有输出重定向到文件

        •  > 文件内容会被覆盖

        set –C   禁止将内容覆盖已有文件,但可追加

        >| file 强制覆盖

        set +C   允许覆盖

        •  >> 原有内容基础上,追加内容

        •  2> 覆盖重定向错误输出数据流

        •  2>>   追加重定向错误输出数据流

        •  标准输出和错误输出各自定向至不同位置

        COMMAND > /path/to/file.out 2> /path/to/error.out

        •  合并标准输出和错误输出为同一个数据流进行重定向

        –  &> 覆盖重定向

        –  &>>   追加重定向

        –  COMMAND > /path/to/file.out 2>&1 (顺序很重要)

        –  COMMAND >> /path/to/file.out2>&1

        –  ():合并多个程序的STDOUT

        ( cal 2007 ; cal 2008 ) > all.txt

二、tr命令

        1、使用格式

        •  tr 转换和删除字符

        •  tr [OPTION]... SET1 [SET2]

        •  选项:

        -c –C --complement:取字符集的补集

        -d --delete:删除所有属于第一字符集的字符

        -s --squeeze-repeats:把连续重复的字符以单独一个字符表示

-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符

[:alnum:]:字母和数字

[:alpha:]:字母

[:cntrl:]:控制(非打印)字符

[:digit:]:数字

[:graph:]:图形字符

[:lower:]:小写字母

[:print:]:可打印字符

[:punct:]:标点符号

[:space:]:空白字符

[:upper:]:大写字母

[:xdigit:]:十六进制字符

 ————————————————

tr ‘\n’ ‘ ’ < num.txt

2、从文件中导入STDIN
    •  使用<来重定向标准输入
    •  某些命令能够接受从文件中导入的STDIN
        tr ‘a-z’ ‘A-Z’< /etc/issue
        该命令会把/etc/issue中的小写字符都转换成写写字符
    •  tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符
    •  cat   > file
        abc
        how
            按ctrl+d离开,可以使用文件来代替键盘的输入
    •  Cat   > filea <  fileb
         把文件fileb的内容覆盖到fiela中
 
3、把多行发送给STDIN
    •  使用“<<终止词”命令从键盘把多行重导向给STDIN
        –  直到 终止词   位置的所有文本都发送给STDIN
        –  有时被称为就地文本(heretext)
        mail -s "Please Call" [email protected] <<END
        > Hi Wang,
        >
        > Please give me a call when you get in. We may need
        > to do some maintenance on server1.
        >
        > Details when you're on-site
        > Zhang
        > END

三、管道

    1、管道(使用符号“|”表示)用来连接命令
        命令1 | 命令2 | 命令3 | …
        –  将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
        –  STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
        –  最后一个命令会在当前shell进程的子shell进程中执行用来
        –  组合多种工具的功能
         ls   | tr 'a-z' 'A-Z'
        •  less :一页一页地查看输入
                ls -l /etc | less
        •  mail: 通过电子邮件发送输入
                echo "test email" | mail -s "test"[email protected]
        •  lpr:把输入发送给打印机
                echo "test print" | lpr -P printer_name

    2、管道中 - 符号
        •  示例:
        将 /home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,经过管道后,将 tar-cvf - /home 传送给后面的 tar -xvf - , 后面的这个 - 则是取前一个命令的 stdout,因此,就不需要使用临时file了
        •  tar -cvf - /home | tar-xvf   -

    3、重定向到多个目标(tee)
        •  命令1| tee   [-a ] 文件名| 命令2
            把命令1的STDOUT保存在文件中,做为命令2的输入
            -a 追加
        •  使用:
            –  保存不同阶段的输出
            –  复杂管道的故障排除
            –  同时查看和记录输出

四、文本处理工具

      文件内容:less和 cat
    •  文件截取:head和tail
    •  按列抽取:cut
    •  按关键字抽取:grep
        1、 文件查看命令:cat,tac,rev
            cat [OPTION]... [FILE]...
            -E: 显示行结束符$
            -n: 对显示出的每一行进行编号
            -A:显示所有控制符
            -b:非空行编号
            -s:压缩连续的空行成一行
       
        2、分页查看文件内容
            •  more: 分页查看文件
                    more [OPTIONS...] FILE...
                    -d: 显示翻页及退出提示
            •  less:一页一页地查看文件或STDIN输出查看时有用的命令包括:
                /文本 从光标处向下搜索文本
                n/N   跳到下一个 或 上一个匹配
                ?文本 从光标处向上搜索文本
                less  命令是man命令使用的分页器
         
        4、显示文本前或后行内容
            •  head [OPTION]... [FILE]...
                -c #: 指定获取前#字节
                -n #: 指定获取前#行
                -#: 指定行数,同-n
            •  tail [OPTION]... [FILE]...
                -c #: 指定获取后#字节
                -n #: 指定获取后#行
                -#:
                -f: 跟踪显示文件fd新追加的内容,常用日志监控相当于 --follow=descriptor
                -F: 跟踪文件名,相当于—follow=name--retry
            •  tailf 类似tail –f,当文件不增长时并不访问文件

             __________________________________________________________

                tail -f 基于文件描述符追踪
                tail -F 基于文件名追踪
                tailf  基于文件描述符追踪,如果文件不增长,它不会访问磁盘文件,减少了IO访问。常用于日志监控
        
        4、按列抽取文本cut和合并文件paste   
            •  cut [OPTION]... [FILE]...
                -d DELIMITER: 指明分隔符,默认tab
                -f FILEDS:
                #: 第#个字段
                #,#[,#]:离散的多个字段,例如1,3,6
                #-#:连续的多个字段, 例如1-6
                混合使用:1-3,7
                -c 按字符切割
                --output-delimiter=STRING指定输出分隔符
        5、cut和paste
            •  显示文件或STDIN数据的指定列
                cut -d: -f1 /etc/passwd
                cat /etc/passwd | cut -d: -f7
                cut -c2-5 /usr/share/dict/words
            •  paste 合并两个文件同行号的列到一行
                paste [OPTION]... [FILE]...
                -d 分隔符:指定分隔符,默认用TAB
                    -s : 所有行合成一行显示
                    paste f1 f2
                    paste -s f1 f2

4、分析文本的工具
    •  文本数据统计:wc
    •  整理文本:sort
    •  比较文件:diff和patch

    1、收集文本统计数据wc   
        •  计数单词总数、行总数、字节总数和字符总数
        •  可以对文件或STDIN中的数据运行
            wc story.txt
            39      237   1901 story.txt
            行数    字数 字节数

        •  常用选项
            – -l 只计数行数
            – -w 只计数单词总数
            – -c 只计数字节总数
            – -m 只计数字符总数
            – -L 显示文件中最长行的长度

    2、文本排序sort
        •  把整理过的文本显示在STDOUT,不改变原始文件sort [options] file(s)
        •  常用选项
            –  -r执行反方向(由上至下)整理
            –  -n执行按数字大小整理    如果为数字:先比第一个数字,再比第二个数字
            –  -f 选项忽略(fold)字符串中的字符大小写
            –  -u 选项(独特,unique)删除输出中的重复行
            –  -t c  选项使用c做为字段界定符
            –  -k X  选项按照使用c字符分隔的X列来整理能够使用多次

    3、uniq  
        •  uniq命令:从输入中删除前后相接的重复的行
        •  uniq [OPTION]... [FILE]...
            -c: 显示每行重复出现的次数
            -d: 仅显示重复过的行
            -u: 仅显示不曾重复的行,连续且完全相同方为重复
        •  常和sort命令一起配合使用:
            sort  userlist.txt   | uniq  -c

    4、比较文件
        •  比较两个文件之间的区别
            diff foo.conf foo2.conf
            5c5
            < use_widgets = no
            ---
            > use_widgets = yes
             注明第5行有区别(改变)

    5、复制对文件改变patch
        •  diff  命令的输出被保存在一种叫做“补丁”的文件中
              使用-u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
        •  patch 复制在其它文件中进行的改变(要谨慎使用)
              适用-b 选项来自动备份改变了的文件
            $ diff -u foo.conf foo2.conf >foo.patch
            $ patch -b foo.conf foo.patch

五、命令帮助

    1、内部命令
               help COMMAND   
                man bash
    2、外部命令
            1.       命令帮助
            1        COMMAND --help
            2        COMMAND -h
            3        使用手册(manual)
            4        man COMMAND
            5        信息页
            6        info COMMAND
            7        程序自身的帮助文档 README
            8        INSTALL
            9        ChangeLog
            10     程序官方文档
            11     官方站点:Documentation
            12     发行版的官方文档
            13     Google

              --help选项
                • 显示用法总结和参数列表
                • 使用的大多数,但并非所有的
                    示 例 :  date --help
                    Usage: date [OPTION]... [+FORMAT]
                    or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
                •[] 表示可选项
                •CAPS或<> 表示变化的数据
                •  ... 表示一个列表
                • x |y| z 的意思是“ x 或y 或z “
                •-abc的意思是-a -b –c
               •{ }     表示分组
            
              man命令
                •提供命令帮助的文件
                •手册页存放在/usr/share/man
                •几乎每个命令都有man的“页面”
                •man页面分组为不同的“章节”
                •统称为Linux手册
                •man命令的配置文件:/etc/man.config(centos6.9) | man_db.config (centos7)
                    MANPATH /PATH/TO/SOMEWHERE: 指明man文件的搜索位置
                • man -M /PATH/TO/SOMEWHERECOMMAND: 到指定位置下搜索COMMAND命令的手册 页并显示
                • 中文man需安装包man-pages-zh-CN

             man章节
                1: 用户命令
                2: 系统调用
                3: C库调用
                4: 设备文件及特殊文件
                5: 配置文件格式
                6: 游戏
                7: 杂项
                8: 管理类的命令
                9:Linux 内核API

            帮助手册中的段落说明:
                  –NAME 名称及简要说明
                  –SYNOPSIS 用法格式说明
                         [ ] 可选内容
                         <> 必选内容
                         a|b二选一
                         { }分组
                         ...同一内容可出现多次
                –DESCRIPTION 详细说明
                –OPTIONS 选项说明
                –EXAMPLES 示例
                –FILES 相关文件
                –AUTHOR 作者
                –COPYRIGHT版本信息
                –REPORTING BUGSbug信息
                –SEE ALSO 其它帮助参考

            查看man手册页
                ²  man  [章节]     keyword
                ²  列出所有帮助
                man –a keyword
                ²  搜索man手册
                man -k keyword 列出所有匹配的页面 使用whatis 数据库
                ²  相当于whatis
                man –f keyword
                ²  打印man帮助文件的路径
                    man –w  [章节] keyword          

             man命令的操作方法:使用less命令实现
                  space, ^v, ^f, ^F: 向文件尾翻屏
                  b, ^b: 向文件首部翻屏
                  d, ^d: 向文件尾部翻半屏
                  u, ^u: 向文件首部翻半屏
                  RETURN, ^N, e, ^E or j or ^J:向文件尾部翻一行
                  y or ^Y or ^P or k or ^K:向文件首部翻一行
                  q: 退出
                  #:跳转至第#行
                  1G: 回到文件首部
                  G:翻至文件尾部

            man搜索
                •  /KEYWORD:
                       以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写;
                       n: 下一个
                       N:上一个
                •  ?KEYWORD:
                       以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写;
                       n: 跟搜索命令同方向,下一个
                       N:跟搜索命令反方向,上一个            

             Info
                •  man常用于命令参考,GNU工具info适合通用文档参考。
                •  没有参数,列出所有的页面
                •  info 页面的结构就像一个网站
                •  每一页分为“节点”
                •  链接节点之前*
                •  info [命令]

            1、导航info页
            •   Tab键移动到下一个链接方向键,PgUp,PgDn导航
            •   Tab键移动到下一个链接
            •   Tab键移动到下一个链接d 显示主题目录
            •   Home 显示主题首部
            •   Enter进入选定链接
            •   n/p/u/l进入下/前/上一层/最后一个链接
            •   s文字文本搜索
            •    q退出info

            2、通过本地文档获取帮助

            System->help(centos6)
            Applications-> documentation->help(centos7)
            提供的官方使用指南和发行注记
            /usr/share/doc目录
            • 多数安装了的软件包的子目录,包括了这些软件的相关原理说明
            • 常见文档:READMEINSTALL CHANGES
            • 不适合其它地方的文档的位置
            ²  配置文件范例
            ²  HTML/PDF/PS 格式的文档
            ²  授权书详情

            3、通过在线文档获取帮助
            • 第三方应用官方文档
                  – http://www.nginx.org
                  – http://tomcat.apache.org
                  – http://httpd.apache.org
                  – http://www.python.org
            • 通过发行版官方的文档光盘或网站可以获得
                  – 安装指南、部署指南、虚拟化指南等
                  – 红帽知识库和官方在线文档
                         http://kbase.redhat.com
                         http://www.redhat.com/docs
                         http://access.redhat.com
           
            4、红帽全球技术支持服务
            • rhn.redhat.com或者本地卫星服务器/代理服务器
                基于网络管理的服务器
                RHN代理服务器为RHN流量提供缓存
                RHN卫星服务器提供自主的RHN

            • RHN账户
                为及其注册和基于网络管理的RHN用户
                用于系统自动验证的系统ID
            •sosreport
                收集所有系统上的日志信息的工具,并自动打成压缩包,方便技术支持人员和红帽全球支持提供分析问题依据
 
            5、网站和搜索
                http://tldp.org
                http://www.slideshare.net
                http://www.google.com
                Openstackfiletype:pdf
                    rhcasite:redhat.com/docs



猜你喜欢

转载自blog.csdn.net/csdn_immortal/article/details/80792816
今日推荐