2019-09-01-数据流

  1. 数据流
    1. 数据流重定向
    2. 一定条件下执行命令
    3. 提取信息
    4. 比较文件不同

数据流

categories: Linux

数据流重定向

  1. 将命令的输出写入文件

    # ls -al / > ./rootfiles # 写入到rootfiles
    # ls -al / >> ./rootfiles # 追加到rootfiles
  2. 将命令报错写入文件

    # ls -al /notadir 2> ./rootfiles # 写入到rootfiles
    # ls -al /notadir 2>> ./rootfiles # 追加到rootfiles
    # ls -al /notadir 2> /dev/null # /dev/null是一个黑洞, 扔进去的东西就没了 
  3. 将正确和报错都写入同一个文件

    # ls -al / > ./rootfiles 2>&1 # 写入到rootfiles, &1指代rootfiles
  4. 从文件读取

    # ls < listfile

一定条件下执行命令

  1. ;分隔符:连续执行多个命令

    # ls;touch newfile
  2. &&分隔符: 在前一条命令不报错的时候执行下一条命令

    # ls /tmp && touch /tmp/newfile # /tmp目录存在时创建/tmp/newfile
  3. ||分隔符: 在前一条命令报错的时候执行下一条命令

    # ls /tmp/newfile || touch /tmp/newfile # 如果/tmp/newfile不存在就创建它

提取信息

  1. 使用grep搜寻字符串

    # grep [expr] [targetfile(s)]
    • 数据流重定向给grep

       # ls | grep [expr]
    • grep正则表达式的特殊规则

      • {m, n}:大括号需要转义, 亦即写成grep '...\{m, n\}' ...
      • [a-z]: 中括号不需要转义
    • egrep, 延申的正则表达式

      • 可以使用+, ?, |, ()等特殊符号
  2. 使用sed替换删除

    # sed '[line range][actions]' [stdin]

    [line range]n1,n2的形式表示n1行到n2行所有行.

    [actions]包括: a: 新增, c: 取代, d: 删除, i:插入, p: 打印, s: 取待, 语法类似vim中ex编辑器.

    如果一个sed不够, 还可以再接sed.

    单引号不要丢

    • 列出/etc/passwd, 删除2到5行

      # cat /etc/passwd | sed '2,5d'
    • 在2到5行后增加两行文字111\n222

      # cat /etc/passwd | sed '2,5a111\
      >222' # 通过命令行的换行来增加多行文字
    • 将2到5行的:更换为,

      # cat /etc/passwd | sed '2,5s/:/,/g'

比较文件不同

  1. diff

    # diff [-bBi] from-file to-file
    比较from-file和to-file的不同, 输出from-file和to-file的差异
    -b: 多个连续空格视作一个
    -B: 忽略空行差异
    -i: 忽略大小写差异
  2. cmp

    # cmp [-s] from-file to-file
    如果没有-s参数, 只会列出第一个不同处. 可以比较二进制文件.

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tianyilt@qq.com

文章标题:2019-09-01-数据流

本文作者:tianyilt

发布时间:2019-12-07, 23:40:55

最后更新:2019-12-10, 08:53:01

原始链接:http://yoursite.com/2019/12/07/Linux/2019-09-01-%E6%95%B0%E6%8D%AE%E6%B5%81/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏