本文共 2856 字,大约阅读时间需要 9 分钟。
本章目录:
一. 三种I/O设备二.把I/O重定向入文件三.tr命令的使用四.使用管道链接命令五.tee命令的使用一. 三种I/O设备1.标准输入和输出(1)程序:指令+数据a.指令:决定了功能是什么数据:b.读入数据:input输出数据:output(2)打开的文件都有一个fd: file descriptor (文件描述符)(3)Linux给程序提供三种I/O设备:a.标准输入(STDIN) ——0,默认接收来自键盘的输入b.标准输出(STDOUT)——1,默认输出到终端窗口c.标准错误(STDERR)——2,默认输出到终端窗口(4)I/O重定向:改变默认位置二.把I/O重定向入文件1.STDOUT和STDERR可以被重定向到文件(1)语法:命令+操作符号+文件名a.命令:执行的命令可以输出内容b.操作符号:(a)>:输出内容重定向到文件中并覆盖文件原有内容1>:把STDOUT重定向到文件2>:把STDERR重定向到文件&>:把所有输出重定向到同一个文件(b)>>:输出内容重定向到文件中并追加到文件中原有内容的最后一行1>>:把STDOUT重定向到文件2>>:把STDERR重定向到文件c.文件名:输出的内容要被重定向到的文件的文件名(2)操作符的使用:a.1>的用法:(a)把正确输出重定向到文件(b)系统默认是1>,1省略不写(c)如果重定向到的文件不存在会自动创建例1:例2:b.2>的用法:(a)把错误输出重定向到文件(b)如果重定向到的文件不存在会自动创建例:c.&>的用法:(a)如果将正确输出和错误输出重定向到不同文件,不需要使用&>,而需要将>和2>综合使用语法为:命令 >(或者2>) 文件1 2>(或者>) 文件2(b)如果将正确输出和错误输出完全一样地重定向到同一个文件,使用&>语法为:命令 &> 文件例1:例2:d.1>>的用法:(a)把正确输出的内容追加到文件原有内容的最后一行(b)如果重定向到的文件不存在会自动创建例:e.2>>的用法:(a)把错误输出的内容追加到文件原有内容的最后一行(b)如果重定向到的文件不存在会自动创建例:2.set -C的使用:(1)使用这条命令后,会开启禁止覆盖的功能(2)当文件已存在时不允许覆盖(3)当文件不存在时仍然可以创建并覆盖(4)追加不受影响(5)在开启set -C的功能后,如果要强制覆盖,需要使用操作符>|(6)使用set +C关闭该功能例1:例2:例3:例4:例5:3.正确结果与错误结果之间的转换:(1)语法:输出正确内容的命令 1>&2将正确输出转换为错误输出输出错误内容的命令 2>&1将错误输出转换为正确输出例:4.()的使用:合并多个程序的正确输出例:三.tr命令的使用1.功能与语法:(1)功能:转换和删除字符语法:命令[+选项]+第一字符集[+第二字符集]a.选项:(a)-t,--truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符,一一对应(b)-c,-C,--complement::取字符集的补集(c)-d,--delete:删除所有属于第一字符集的字符(d)-s,--squeeze-repeats:把连续重复的字符以单独一个字符表示2.使用方法:(1)tr单独使用的方法:a.语法:tr 第一字符集 第二字符集b.第一字符集对应字符转化为第二字符集对应的字符c.如果第一字符集的字符数多于第二字符集,则第一字符集多出来的字符均会转换为第二字符集的最后一个字符d.如果第一字符集的字符数多于第二字符集,则第一字符集多出来的字符均会转换为第二字符集的最后一个字符e.如果要转换的内容不存在于第一字符集,则不会转换例1:例2:例3:例4:(2)tr -t 的用法:a.语法:tr -t 第一字符集 第二字符集b.将第一个字符集对应字符转化为第二字符集对应的字符c.必须一一对应的转换,如果第一字符集的字符数多与第二字符集,则第一字符集多出来的字符不会转换例:(3)tr -d 的用法:a.语法:tr -d 第一字符集b.删除所有属于第一字符集的字符c.只能有第一字符集例:(4)tr -s的用法:a.语法:tr -s 第一字符集b.第一字符集列出的字符如果连续重复,将以单独一个字符表示c.只能有第一字符集例:(5)tr -c的用法:a.语法:tr -s 第一字符集b.取第一字符集的补集(在下一章节管道符中与-d共同使用)(6)字符的特殊表示方法:[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符 [:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符 [:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制字符例:3.输入重定向:(1)使用<来重定向标准输入a.语法:tr 第一字符集 第二字符集 < 指定输入的内容b.本身依赖于键盘输入的内容重定向到指定的输入内容c.将指定的输入内容进行字符的转换例:(2)cat > 文件1 [<文件2]a.语法:cat > 文件1将输入的内容重定向为键盘输入,并将输出的内容重定向到文件1中c.语法:cat > 文件1 <文件2将输入的内容重定向为键盘输入,再重定向为文件2的内容,并将输出的内容重定向到文件1中,实质就是复制例1:例2:(3)把多行发送给STDIN:a.使用“<<终止词”命令从键盘输入把多行内容重定向给STDINb.直到 终止词 位置的所有文本都发送给STDINc.终止词必须是单独的一行例:四.使用管道链接命令1.功能与语法:a.功能 :管道(使用符号“|”表示)用来连接命令语法 :命令1 | 命令2 | 命令3 | ……将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN例1:例2:输出的内容只保留ac(除了ac其他全部删除,包括换行符等等,使用cat -A 可以显示出换行符)2.STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现例:less :一页一页地查看输入例:mail: 通过电子邮件发送输入例:5.将输出内容重定向到多个目标(tee):a.语法:命令1 | tee [-a ] 文件名 | 命令2 把命令1的STDOUT保存在文件中,做为命令2的输入-a 追加例:转载于:https://blog.51cto.com/13572120/2060397