linux 输入输出流 管道,输入输出重定向与管道命令

输入输出重定向、管道

1.文件描述符:

FD: 内核用来追踪在内存中已经打开的文件的属性(标识),是一个内存结构,

需要空间来存放此信息

2.标准输入输出

INPUT : 标准输入: stdin ,  描述符 : 0

OUPUT: 标准输出: stdout          1

错误输出 : stderr              2

3.  I/O 重定向

1). 输入重定向  :  <      (输入没有覆盖的概念)

<< [EOF封装]: 此处创建文件

常用于在脚本中创建文件或者生成菜单

eg:        #生成菜单

cat << EOF

a: show a

b: show b

c:  show c

EOF

--------> a: show a

b: show b

c:  show c

#把脚本生成的信息输出生成一个文档

cat 》 /path to file.txt  << EOF

a: show a

b: show b

c:  show c

EOF

2).输出重定向 :   > (覆盖输出)    >> (追加输出,不覆盖原内容)

3). 强制覆盖重定向输出:     >|

4). 错误重定向  :2> (覆盖输出)   , 2>>(追加输出)

5).全部信息重定向 :合并标准输出和错误输出为同一个数据流进行重定向

&>  :  (正确和错误信息都定向)

等效于  cmd > /path2>&1

&>>:追加重定向

6).支持同时重定向标准的正确和错误输出 :

cmd > /path to 1  2> /path to 2   (分别把正确、错误信息输出到指定文件)

7).    ( ):合并多个程序的STDOUT (用;分号分割)

( cal 2007;cal 2008 ) >  all.txt

8).   多行重定向:  用<

eg: cat f1 <

kdkdk

kdkdk

eof (必须是独立的一行,不可以有空格等)

------》实现重定向

9).禁止使用覆盖重定向特性 :       set -C

回复特性:     set +C

强制覆盖重定向输出:     >|     (在已经设置禁止覆盖时强制覆盖重定向)

注意: 输出重定向只能用于正常的输出,无法用于错误输出

10)./dev/null   bit bucket :位桶   ,用于丢弃任何输入到其中的数据

11).命令执行状态结果:   使用$?

执行正确: 0     错误:非零值

自定义退出:

exit [n]

4. 管道:类似输出重定向的特殊实现,可以实现多重使用

1) .管道(使用符号“ |”表示)用来连接命令

命令1 | 命令2 | 命令3 | …

将命令1的STDOUT发送给命令2的STDIN,命令2的

STDOUT发送到命令3的STDIN

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

最后一个命令会在当前shell进程的子shell进程中执行用来

注意: 无法传递前面命令生成的变量并传递到最后的命令中,最后的命令是在子

shell中运行,已经不处于前面生成变量的作用范围

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

2). 管道中实现即输出到显示端又输出到后续命令的实现: T 管道

命令  tee

用法: 紧跟在需要做双向输出的命令后面

eg: cat /file | tee /tmp/abcd | wc -l       #显示file的内容并且放在/tmp/abcd文

件中,同时输出给wc命令 显示行数

3. tr :   转换 或者 删除

格式: tr [option]  SET1 [SET2]

-c  补集 (除了匹配内容之外的内容)

-d 删除符合SET1中的字符

-s  压缩 ,将重复的字符压缩为一个字符显示

-t   当对应转换时,后面字符组位数比前面小时,只转换后面字符组对应的位数,

多出的不管

\t  水平的tab

\v 垂直的tab  可以实现阶梯状

对应转换:  ‘abcd’ 'efgh'

a->e  b->f 以此类推

‘abcd’'efg'

(注意 :当后面的字符位数不足时,把最后的g作为前面d的转换对象)

习惯上>后面接的是文件,| 后面是跟着命令,若是>后面跟着命令,有可能会把命令当做文件名.

练习:

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

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

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

whoami  | 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!

操作系统版本信息

echo -e "Hello, i am `whoami` ,the system version is here,please help me to check it ,thanks! \n

`lsb_release`" > mail -s "help" liux

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

ls -m /root | tr , \b

或者:   ls /root | tr '\n'  ' '

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

echo "1 2 34 5 6 7 8 9 10" > file1

echo $[cat file1 | tr ' ' '+']

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

cat a.txt | tr -d '\r'     (windows 中,文件中换行会显示为^M)

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

和空格

echo 'xt.,l 1 jr#!$mn2 c*/fe3 uz4'| tr -cd '[:digit:] \n'

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

echo $PATH | tr : '\n'

9、删除指定文件中重复的空行

cat file | tr -s '\n'

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

tr -cs '[:alpha:]' '\n'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux操作之输入输出重定向管道 作者:佚名 出处:中国自学编程网收集整理 发布日期:2008-07-12   Unix下使用标准输入stdin和标准输出stdout,来表示每个命令的输入和输出,还使用一个标准错误输出stderr用于输出错误信息。这三个标准输入输出系统缺省与控制终端设备相联系在一起的。因此,在标准情况下,每个命令通常从它的控制终端中获取输入,将输出打印到控制终端的屏幕上。      但是也可以重新定义程序的输入 stdin和输出stdout,将它们重新定向。最基本的用法是将她们重新定义到一个文件上去,从一个文件获取输入,输出到另外的文件中等。      $ ls > ls.out      $ cat < ls.out      这种输入输出重定向带来了极大的灵活性,可以将输出结果记录下来,也可以将程序所需要的输入使用文件提前准备就绪,这样一来多次执行就不需要重新输入。      $ echo “ today is “ > out      $ date >> out      使用 >>标记表示输出结果采用添加的方式,将结果附加在文件out后面,而不是简单的将原有文件重新覆盖的方式。      更为灵活的方式是将输入输出和一个执行命令联系起来,而不是一个固定的文件。      $ ls -l | grep mbox   上面的命令,将 ls -l的输入作为grep的输入,这种方式称为管道。Unix提供了很多功能强大的小命令,但使用管道将这些命令组合起来,就形成了非常强大的工具组合,能完成非常复杂的工作。      Unix系统提供了一些特殊的设备文件,用在一些特殊情况下。例如一个特殊设备文件为/dev/null,永远无法写满,写入的内容被系统立即丢弃。如果不想看到程序的输出,可以使用它作输出。      $ make world > /dev/null   去除了屏幕输出,使整个程序执行过程非常平静。   

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值