• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小小慧
博客园    首页    新随笔    联系   管理    订阅  订阅
4. 重定向(重点)

I/O重定向:允许我们更改输入输出走向,一般,输入到键盘,输出到屏幕

cat——连接文件

sort——排序文本行

uniq——报道或省略重复行

grep——打印匹配行

wc——打印文件中换行符、字和字节个数

head——输出文件第一部分

tail——输出文件最后一部分

 一、重定向标准输出

  重定向标准输出到另一个文件除了屏幕,我们使用“>"重定向符,其后跟着文件名

用>重定向符,输出到另一个文件

ls-l/usr/bin > ls-output.txt    创建一个长长的目录/usr/bin列表,并且输送程序运行结果到文件ls-output.txt中  

使用>重定向符时,存在以下问题

1)制定的目录/usr/bin必须是存在的目录,如果不是存在的目录,如/bin/usr,会产生错误信息并输出到屏幕上

2)产生错误的时候,使用ls-l ls-output.txt会发现,这个目标文件里面是空的,这是因为>重定向的时候是从头开始重写。那么引入>>重定向符

>重定向输出结果时,目标文件总是从开头进行重写,如何将重定向结果追加到文件内容后面,而不是从开头重写文件?我们使用>>重定向符

ls-l /usr/bin >> ls-output.txt 

这样将导致输出结果添加到文件内容之后,如果文件不存在,文件会被创建,就如同>一样了

3)另外,其实可以很好的利用>重定向从头重写目标文件的作用,来删除目标文件中的内容

> ls-output.txt

4)错误消息是返回到显示屏幕上了,我们有时候是想将其重定向到文件中,该怎么做?

   首先,我们先介绍文件流的前三个看做标准输入、标准输出、错误,shell内部参考他们为文件描述符0、1、2

   重定向标准错误:使用2>重定向符

ls-1 /bin/usr 2> ls-error.txt

引申:

 1. 重定向标准输出和错误到同一个文件

ls-l bin/usr > ls-output.txt 2> &1

注意上边的顺序!首先重定义标准输出到文件ls-output.txt,然后重定向文件描述符2(标准错误)到文件描述符1(标准输出)使用表示法2>&1

另外,bash版本提供了一种新的方法,使用&>重定向符

ls-l /bin/usr &> ls-output.txt

2.处理不需要的输出

   让其输出到/dev/null文件中,/dev/null文件是系统设备,叫做位存储器,可以接受输入,并且对输入不做处理,可用于隐藏命令错误信息

ls-l /bin/usr 2> /dev/null

 

二、cat——连接文件

 cat是读取一个或多个文件,然后复制他们到标准输出

1.显示文件(到显示屏),类似type命令

cat ls-output.txt

2.连接文件

cat movie.mpeg.0* > moovie.mpeg

3.键盘输入信息,并显示在屏幕上

[me@linuxbox-]-$ cat
The quick browm fox junped over the lazy dog.

注意!输入cat换行,再键盘输入目标数据,然后ctrl+d键,告诉cat已经输入到文件末尾

4.键盘输入信息,并重定向到目标文件中

[me@linuxbox-]-$ cat lazy——dog.txt
The quick browm fox junped over the lazy dog.

 

三、管道线

什么是管道线? 

           命令从标准输入读取信数据,然后再把数据输送到标准输出,命令的这种能力被一个shell特性所利用,这个特性就叫做管道线,使用管道操作符|,一个命令的标准输出可以管道到另一个命令的输入

command1 | command2     command1命令的结果作为command2的参数,
ls-l /usr/bin | less   less是接受标准输入的命令,我们用less来一页一页地显示任何命令的输出,命令把他们的运行结果输送到标准输出

 

四、过滤器

       接受输入,并以某种方式改变它,然后输出。比如sort

ls /bin /usr/bin | sort | less    把目录/bin和/usr/bin中的可执行命令联合在一起,然后把他们排序,最后浏览执行结果

 

五、uniq——报道或忽略重复行

          常与sort一起用

ls /bin /usr/bin |sort | uniq | less

如果我们想看到重复的数据列表,uniq_d

ls /bin /usr/bin |sort | uniq-d | less

 

六、wc——打印行,字和节数

wc ls-output.txt
会输出三个数,分别是行数,单词数和字节数

如果要强制只输出行数,则用wc-l

ls /bin /usr/bin | sort | uniq |wc-l

 

七、grep——打印匹配行

grep pattern [file...]     patten是模式
ls /bin /usr/bin | sort | uniq | grep zip   输出是zip类型的匹配文件

 

八、head/tail——打印文件开头和结尾部分

1.head默认打印文件的前10行,如果想改变打印行数,就用head—n

head -n 5 ls-output.txt   打印前5行
tail -n 15 ls-output.txt    打印后15行

2.使用 “-f” 选项, tail 命令继续监测这个文件,当新的内容添加到文件后,它们会立即出现在屏幕上。这会一直继续下去直到你输入 Ctrl-c。

tail -f /var/log/messages

 

九、tee——从Stdin读取数据,并同时输出到Stdout和文件

tee 程序从标准输入读入数据,并且同时复制数据到标准输出(允许数据继续随着管道线流动)和一个或多个文件

当在某个中间处理阶段来捕捉一个管道线的内容时,这很有帮助。这里,我们重复执行一个先前的例子,这次包含 tee 命令,在 grep过滤管道线的内容之前,来捕捉整个目录列表到文件 ls.txt:

ls /usr/bin | tee ls.txt | grep zip

posted on 2016-08-16 21:37  小小慧  阅读(360)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3