Linux--重定向

cat:合并文件
sort:对文本行排序
uniq:报告或删除文件中重复的行
wc:打印文件中的换行符、字和字节的个数
grep:打印匹配行
head:输出文件的第一部分内容
tail:输出文件中的最后一部分内容
tee:读取标准输入的数据,并将其内容输出到标准输出和文件中

1、标准输入、标准输出和标准错误

我们使用过的很多程序生成了不同种类的输出,这些输出通常包含两种类型。一种是程序运行的结果,即该程序生成的数据;另一种是状态和错误信息,表示程序当前的运行情况。比如输入ls命令,屏幕上将显示它的运行结果以及它的相关错误信息。
与UNIX“一切都是文件”的思想一致,类似ls的程序实际上把它们的运行结果发送到了一个成为标准输出(standard output,通常表示为stdout)的特殊文件中,它们的状态信息则发送到了另一个称为标准错误(standard error,表示为stderr)的文件中。默认情况下,标准输出和标准错误都将被链接到屏幕上,并且不会被保存在磁盘文件中。
另外,许多程序从一个称为标准输入(standard input,表示为stdin)的设备来得到输入。默认情况下,标准输入连接键盘。

1.1、标准输出重定向

I/O重定向功能可以重新定义标准输出内容发送到哪里。使用重定向操作符>,后面接文件名,就可以把标准输出重定向到另一个文件中,而不是现实在屏幕上。为什么我们要这么做呢?它主要用于把命令的输出内容保存到一个文件中。比如,我们可以按照下面的形式把ls命令的输出保存到ls-output.txt文件中,而不是输出到屏幕上。
在这里插入图片描述
使用less ls-output.txt查看文件中的内容:
在这里插入图片描述
如果我们输入的指令是错误的,则会在屏幕上输出错误信息,因为我们只重定向了标准输出,而没有重定向标准错误,所以这个错误仍然会输出到屏幕上。
注意
(1)、使用重定向,目的文件通常会从问价开通部分重写改写,如果采用错误指令重定向,当重定向操作开始重写改写这个文件时,并在出现错误的情况下停止操作,最终导致改文件内容被删除。基于这个特性我们可以采用下面的方法新建一个文件或者删除文件内的内容:
在这里插入图片描述
仅仅使用重定向符,并在它之前不加任何命令,就可以删除一个已经存在的文件内容或者创建一个新的空文件。
(2)、使用重定向符>>可实现不从文件的首位置开始覆盖文件,而是从文件的尾部开始添加输出内容。

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

使用cat命令可以将文件合并,例如:

movie.mpeg.001  movie.mpeg.002  movie.mpeg.003  ...  movie.mpeg.099
cat movie.mpeg.0* movie.mpeg

如果cat命令没有给定任何参数,它执行不会有任何结果–它只是停在那边不动,好像它已经挂起了。实际上它将从标准输入读取内容,由于标准输入在默认情况下是连接键盘,所以实际上它正在等待着从键盘输入内容。

1.2、管道

命令从标准输入到读取数据,并将数据发送到标准输出的能力,是使用了名为管道的shell特性。使用管道操作符|可以把一个命令的标准输出传送到另一个命令的标准输入中:command1 | command2
例如:ls -l /usr/bin | less

1.2.1、过滤器

管道功能进程用来对数据执行复杂的操作。也可以把多条命令合在一起构成一个管道。这种方式中用到的命令通常被称为过滤器(filter)。过滤器接收输入,按照某种方式对输入进行改变,然后再输出它。第一个要用到的是sort。假设要把/bin和/usr/bin目录下的所有可执行程序合并成一个列表,并且按照顺序排列,最后在查看这个列表:
ls /bin /usr/bin | sort | lsee

1.2.2、uniq–报告或忽略文件中重复的行

uniq命令经常和sort命令结合使用。uniq可以接受来自标准输入或者一个单一文件名参数对应的已排好序的数据列表(可以查看uniq命令的man页面获取详细信息)。默认情况下,该命令删除列表中的所有重复行。因此,在管道中添加uniq命令,可以确保所有的列表都没有重复行。
1、使用uniq命令删除输出内容中的任意重复行

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

2、使用-d选项查看输出内容中重复行

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

1.2.3、wc–打印行数、字数和字节数

wc(字数统计,word count)命令用来显示文件中包含的行数、字数和字节数,例如:
在这里插入图片描述
输出内容第一项为行数,第二项为字数,第三项为字节数。
注意:如果执行wc是没有输入命令行参数,它将接收标准输入内容。-l选项限制命令只报告行数,把它添加在管道中可以很方便地实现计数功能。如果我们要查看以排好序的列表中的条目数,可以按一下方式输入:
ls /bin /usr/bin | sort | uniq | wc -l

1.2.4、grep–打印匹配行

grep是一个功能强大的程序,它用来在文件中查找匹配文本,其使用方式如下:
grep pattern [file...]
grep在文件中遇到“模式”的时候,将打印出包括该模式的行。grep能够匹配的模式内容可以是非常复杂的。
在这里插入图片描述
注意
-i:该选项使得grep在搜索时忽略大小写(通常情况下,搜索是区分大小写的)
-v:该选项使得grep只输入和模式不匹配的行

1.2.5、head/tail–打印文件的开头部分/结尾部分

有的时候,你并不需要命令输出所有的内容,可能只需开头几行或者最后几行。head命令将输出文件的前10行,tail命令则输出文件的最后10行。默认情况下,这两条命令都是输出文件的10行内容,不过可以使用-n选项来调整输出的行数。
在这里插入图片描述
tail中的-f选项用来实时查看文件,一旦添加了新行,新行将会立即显示在屏幕上,该动作在按下Ctrl -C后停止。

1.2.6、tee–从stdin读取数据,并同时输出到stdout和文件

为了和我们的管道隐喻保持一致,Linux提供了一个叫做tee的命令,就好像安装了一个"T"在管道上。tee程序读取读取标准输入,再把读到的内容复制到标准输出(允许数据可以继续向下传递到管道中)和一个或者更多的文件中去。当在某个中间处理阶段来捕获一个管道中的内容是,会很有用。
例如:ls /usr/bin | tee ls.txt | grep zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值