博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
标准I/O和管道
阅读量:6323 次
发布时间:2019-06-22

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

转载于:https://blog.51cto.com/13572120/2060397

你可能感兴趣的文章
【CAS单点登录视频教程】 第04集 -- tomcat下配置https环境
查看>>
自适应网页布局经验
查看>>
Ubuntu apache 禁止目录浏览
查看>>
常用脚本--归档ERRORLOG
查看>>
js网页倒计时精确到秒级
查看>>
常用CSS缩写语法总结
查看>>
TDD:什么是桩(stub)和模拟(mock)?
查看>>
C# 模拟POST提交文件
查看>>
PAT 解题报告 1004. Counting Leaves (30)
查看>>
Android开发之蓝牙 --修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备
查看>>
[Head First设计模式]生活中学设计模式——外观模式
查看>>
Repository模式中,Update总是失败及其解析
查看>>
.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序
查看>>
[原创]浅谈测试团队转型,思维模式的转变是关键
查看>>
Redis学习-SortedSet
查看>>
android CoordinatorLayout使用
查看>>
机器学习资料大汇总
查看>>
Python selenium 滚动条 详解
查看>>
poj1035Spell checker
查看>>
微信程序开发
查看>>