linux将txt输出成out,Linux IO重定向及管道

一,标准输入输出:

程序 : 指令+数据

程序 :IO

可用于输入的设备:文件,键盘设备,文件系统上的常规文件,网卡等;

可用于输出的设备:文件,显示器,文件系统上的常规文件,网卡等,

程序的数据流有三种:

输入的数据流:

输出的数据流: -->标准输出(stdout),显示器

错误输出流:  -->错误输出(stderr), 显示器

fd:file descriptor 文件描述符

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

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

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

错误输出(STDERR):2 默认输出到终端窗口

IO重定向:改变默认位置

STDOUT和STDERR 可以被重定向到文件,支持的操作符号包括:

>   把STDOUT重定向到文件

2>  把STDERR重定向到文件

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

输出重定向:>

特性:覆盖输出!(很危险)

特殊设备: /dev/null    ##任何数据放到里面都会丢弃

0818b9ca8b590ca3270a3433284dd417.png

# set  -C (仅对当前shell有效)

禁止覆盖输出已存在的对象

ls /etc  > /tmp/out.txt #强制覆盖输出 >|

# set  +C

关闭上述特性

0818b9ca8b590ca3270a3433284dd417.png

ls /etc  > /tmp/out.txt

ls /etc  > /dev/sda          //可能会干掉你的硬盘数据

输出重定向:>>

特性:追加输出!

错误输出流

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

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

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

COMMAND > /PATH/TO/FILE.OUT 2> /PATH/TO/ERRORFILE.OUT

合并正常和错误输出流

&> 覆盖重定向

&>> 追加重定向

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

COMMAND >> /path/to/file.out 2>> &1

find /etc -name passwd 2> /dev/null

():合并多个程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt

ls /etc  >> /tmp/out.txt  2>&1

输入重定向  < :

使用

某些命令能够接受从文件中导入的STDIN:

# tr 'a-z' 'A-Z' < /etc/issue     //该命令将issue文件中的小写字母全部转换为大写

0818b9ca8b590ca3270a3433284dd417.png

tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符

0818b9ca8b590ca3270a3433284dd417.png

文档终止词 <<

使用 << 命令从键盘把多行重导向给STDIN,直到 终止词 位置的所有文本都发给STDIN

0818b9ca8b590ca3270a3433284dd417.png

tr命令:

tr[OPTION]... SET1 [SET2]:把输入的数据当成字符,把set1的字符对位转换set2的字符

###  tr  [a-z]  [A-Z] < /etc/issue         把/etc/issue中的所有字符转化为大写并输出到屏幕上

0818b9ca8b590ca3270a3433284dd417.png

tr  -d '[A-Z]' < /etc/issue   把/etc/issue 中的大写字母移除

Here Document:  <<

cat << EOF

cat > /tmp/out.txt <

命令参数

-c或——complerment:取字符集的补集

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

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

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

管道:|

连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流

STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

tee命令:

#命令1 | tee 文件名 | 命令2

把命令1的STDOUT保存在文件名中,然后管道输入给命令2

使用:

保存不同阶段的输出

复杂管道的故障排除

同时查看和记录输出

因此可以定向到多个目标,比如要在屏幕显示,又要保存到磁盘,那么

[root@localhost etc]# ls /etc/ | tee /tmp/out.txt | tr 'a-z' 'A-Z'

0818b9ca8b590ca3270a3433284dd417.png

将command结果输出到屏幕上,又保存了一份在磁盘上,由于tr名字在最后执行,因此结果如下

0818b9ca8b590ca3270a3433284dd417.png

实战训练

1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中

cat /etc/issue | tr 'a-z' 'A-Z' > /tmp/issue.out

2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中

who | tr 'a-z' 'A-Z' > /tmp/who.out

3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下: Hello, I am 用户名,the system version is here,please help me to  check it ,thanks! 操作系统版本信息

mail -s "help" root <

> Hello, I am $USER ,the system version is `cat /etc/centos-release`,please help me to  check it ,thanks!

> eof

0818b9ca8b590ca3270a3433284dd417.png

4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开

ls /root/ | tr '\n' ' '

5、file1文件的内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和

cat file1 | tr ' ' '+' | bc

6、删除Windows文本文件中的'^M'字符

tr -d '\r' < 1.txt | tee 2.txt

7、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格

echo $"xt.,l 1 jr#-limn2 c*/fe3 uz4" |  tr -d [:alpha:],[:punct:]

8、将PATH变量每个目录显示在独立的一行

echo $PATH | tr ':' '\n

9、删除指定文件的空行

cat lss | tr -s '\n'

10、将文件中每个单词(字母)显示在独立的一行,并无空行

cat lss |tr ' ' '\n'| tr -s '\n'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值