您的位置:首页 > 其它

tlcl-redirection(重定向)

2015-05-29 13:11 274 查看
重定向(redirection)

所谓的重定向可以简单的理解为重新指定输入输出的方向,既然是重新制定输入输出的方向,那么原来的输入输出方向是如何的呢?

计算机的I/O有标准输入、标准输出、输出错误,默认的标准输入是与键盘相连接的,标准输出是与屏幕相连接的,至于输出错误也是默认连接到屏幕。

而I/O重定向可以允许我们更改这些默认连接,从文件中读取内容,将输出写入到文件等等,都是重定向。

1.重定向标准输入

ls命令默认将输出连接到屏幕,我们可以通过>重定向操作符改变输出

ls > ls-output.txt

这样ls将要输出的内容就输出到了ls-output.txt文件中

不过下次再向这个文件中重定向时文件内容就会被重写覆盖,当然,我们可以通过使用>>重定向运算符解决这一问题

ls >> ls-out.txt

ls输出的内容就会在原文件末尾添加

注意:重定向的内容自动换行

2.重定向标准输入

在介绍标准输入重定向之前,先来复习复习cat这个命令

之前,一直只是知道cat用来显示较短的文件的内容,却没有发现它的一个很有用的地方,cat可以用来打开多个文件显示,我们有时候会下载一个文件包,然而里面的文本会被分成好多部分,text1,text2…,这时候一个一个查看是很费劲的,我们会想有没有一个东西将这些文本连接起来组成一个文件呢?告诉你,cat就可以做到

cat text1 text2…

这时候cat连接文件还是默认输出到屏幕,怎么将输出重定向到一个文件呢,当然需要用到>运算符

cat text1 text2… > text

这样所有的内容就都在text文件中了。

我们想一想,如果cat不带参数会怎么样?

cat

这时候cat会等待标准输入,默认的标准输入是键盘,敲击几个字符,然后按下Ctrl-D(end of file),屏幕上会输出你敲击的字符。

这是很容易明白的,标准输入连接键盘,标准输出连接屏幕。

那么怎么改变标准输入的连接呢?这时候就需要<运算符了

cat < filename

这样cat就不会等待键盘的标准输入了,因为cat已经从filename中读取到内容了,当然因为标准输出没有发生变化,filename的内容是会被显示到屏幕中的

cat <filename >filename1

这样filename的内容就会被写入到filename1中了,好像并没有什么意义呢。

发现了没有,我们是不是可以将cat filename理解成省略了<呢?

3.重定向输出错误

既然有<运算符,也有>运算符,难道重定向输出错误用的是<>

当然不是

其实在程序向文件流中写入文件时,对“前三条流做”编号,叫做文件描述符(file descriptor),0、1、2分别表示标准输入、标准输出、输出错误,这样在使用>运算符是我们可以显式的“指定输出的流了”。

lss 2> error-output.txt

这时就会把命令错误信息写入到error-output.txt文件中,(lss命令找不到啊),千万别指望lss 1>l-output.txt文件中,因为1指定的是“标准输出流”。

如果既把标准输出又把输出错误写入到文件该怎么办呢?

ls >ls-output.txt 2>&1

注意不要这样

ls 2>&1 >ls-output.txt

因为先把“2流”输出重定向到“1流”,“1流”默认的标准输出连接为屏幕啊,这是如果发生错误,标准错误是会被显示在屏幕上的。

其实有一种更简单的方式:

ls &> ls-output.txt

这样就方便了许多。

4.介绍几个简单的命令和操作符

管道操作符|

|可以将一个命令的标准输出作为另一个命令的标准输入

ls | less

将ls的标准输出通过管道作为less的标准输入

过滤器

sort对输出内容的行进行排序

cat test | sort

wc 打印行,字和字节数

wc filename

grep打印匹配行

grep从文本中搜索匹配行,并打印出来

grep hello test

从test文件中搜索含有hello的行,并将其打印出来

-i选项,忽略搜索的大小写

-v选项,输出不行匹配项的行

tee

接受标准输入,同时输出到标准输出和文件

who |tee who-output.txt

将who的内容显示在屏幕上(标准输出),并输出到who-output.txt文件中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: