zoukankan      html  css  js  c++  java
  • 2.5.5.1 重定向与管道

        Shell提供了数种语法标记,用来修改默认 I/O 的来源端与目的端。
     
        以 < 改变输入
            program < file(s) 可将program的标准输入修改为file(s),允许将多个文件的内容作为程序的输入。 
                tr -d '/r' < my_dos_file.txt ... 
     
        以 > 改变输出
            program > file 可将 program 的标准输出修改为 file:
                tr -d '/r' <my_dos_file.txt > UNIX_file.txt
     
            上述命令首先以 tr 将 my_dos_file.txt 里的 ASCII 的回车符删除,再将转换完成的数据输出到 UNIX_file.txt 。my_dos_file里的原始数据不会有变化。
     
    [many@avention test]$ tr -d 'c' < myfile.txt > your.txt
    [many@avention test]$ cat your.txt
    abdefghijklmnopqrstuvwxyz
     
     
            > 重定向符 (redirector)在目的的文件不存在时,会新建一个。然而,如果目的文件已存在,就会将其覆盖掉:原本的数据都会丢失。
     
            以 >> 附加到文件
                program >> file 可将program的标准输出附加到 file 的结尾处。如果目的文件不存在, >> 重定向符便会新建一个。如果目的文件存在,会将 program 产生的数据附加到文件结尾处:
     
                for f in dos-file*.txt
                do
                    tr -d '/r' < $f >> big-UNIX-file.txt
                done
     
        以 | 建立管道
                program1 | program2 可将 program1 的标准输出修改为 program2 的标准输入。
     
        虽然 < 与 > 可将输入与输出连接到文件,不过管道(pipeline)可以把两个以上执行中的程序衔接在一起。第一个程序的标准输出可以变成第二个程序的标准输入。好处:管道可以使得执行速度比临时文件的程序快上十倍。今后相当多的篇幅都是在讨论如何将工具串在一起,置入越来越复杂且功能越来越强大的管道中。
            tr -d ' ' < my_dos_file.txt | sort > my_UNIX_file.txt
     
     
     
                                                                                        tr
    语法:
        tr [options] soruce-char-list replace-char-list
     
    用途:
        转换字符。例如,将大写字符转换成小写。选项可让你指定要删除的字符,以及将一串重复出现的字符浓缩成一个。
     
    常用选项:
        -c
            取source-char-list的反义。tr要转换的字符,变成未列在source-char-list中的字符。此选项常与-d或-s配合使用。
     
        -C
            与-c相似,但所处理的是字符(可能是包含多个字节的宽字符),而非二进制的字节值。
     
        -d
            自标准输入删除source-char-list里所列的字符,而不是转换它们。
     
        -s
            浓缩重复的字符,如果标准输入中连续重复出现source-char-list里所列的字符,则将其浓缩成一个。
     
    行为模式:
        如同过滤器,自标准输入读取字符,再将结果写入到标准输出。任何输入字符只要出现在source-char-list中,就会置换成replace-char-list里相应的字符。
     
     
    [many@avention Desktop]$ echo abcd > ab.txt
    [many@avention Desktop]$ tr -cd 'a' < ab.txt > a.txt   把ab.txt文件中的abcd字符串的除a以外的字符删掉
    [many@avention Desktop]$ cat a.txt
    a[many@avention Desktop]$                                         由此可见,连换行符都替换掉了。
    [many@avention Desktop]$ cat ab.txt
    abcd
     
     
    注意:构造管道时,应该试着让每个阶段的数据量变得更少。换句话说,如果你有两个要完成的步骤与先后顺序无关,你可以把会让数据量变少的那一个步骤放在管道的前面。这么做可以提升脚本的整体性能,因为UNIX只需要在两个程序间移动少的数据量,每个程序做的事也比较少。
     
    例如,使用sort排序之前,先以grep找出相关的行;这样可以让sort少做些事。
     
  • 相关阅读:
    iOS 成员变量和属性的区别
    程序如何在RAM ROM运行,内存分配与分区
    iOS CGAffineTransform你了解多少?
    iOS配置字符表,查看Crash
    苹果开发账号过期不续费会怎样?
    iOS蓝牙接收外设数据自动中断
    数据结构简述
    antd按需加载,配置babel-plugin-import插件,编译后报错.bezierEasingMixin()解决方案
    docker 启动 nginx 服务
    安装docker
  • 原文地址:https://www.cnblogs.com/avention/p/9688701.html
Copyright © 2011-2022 走看看