今天我们来总结一下个人认为linux下最为实用和厉害的重定向和管道

在说今天的重点之前,必须要先学一点其他的新知识:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)

标准输入(stdin):代码为0,使用<或<<   输入至程序的数据,但不是每个程序都需要输入

标准输出(stdout):代码为1,使用>或>>  程序运行中或者结束时输出的数据,默认是输出在终端上

标准错误输出(stderr):代码为2,使用2>或2>>    程序报错时输出的数据,默认是输出在终端上

关于这三个知识点现在有个概念就好,至于代码和使用的符号不用了解,本部分后面会进行总结

说到重定向不得不说的就是流,什么是流?

个人理解:当做字节,就是说没有确定的类型,将需要传输的东西按字节传输出去。

当然这个只是我个人的理解,大家自己可以百度一下。

不过没关系,流概念无法准确理解并不影响后面的学习,到目前位置我们所有的命令都是以流的形式输出到终端。

实质上,流的输出应该由三个方向:

1、终端

2、文件

3、其他命令

重定向其实就是将命令的输出流重新制定输出到哪儿,则如刚刚所讲,可以是终端,可以是文件,也可以是其他命令。

那么重定向是如何实现的呢?

重定向就是通过“>”和“>>”这两个符号实现的。结合刚刚我们总结的新知识,可以知道重定向是对标准输出和标准错误输出的重定向。

两个符号都可以表示重定向,那么这两个符号有什么区别吗?当然有了!

“>”:表示将前面命令的输出,以覆盖的方式输出到制定文件上,将覆盖指定文件内的内容(如果没有指定文件,则新建一个)

“>>”:表示将前面命令的输出,以累加的方式输出到指定文件上(如果没有指定文件,则新建一个)

那么最开始说的代号是什么意思呢??

默认情况下:

“<”和“<<”:表示标准输入,等价于“0<”和“0<<”

“>”和“>>”:表示标准输出,等价于“1>”和“1>>”

当需要将错误输出到指定文件时:使用“2>”或者“2>>”

废话不多说,我们直接开始举例吧,这样可以有助于我们更好的了解重定向

例1、ls /home > a.txt    表达的意思是:列出/home目录下的文件及目录,并输出到a.txt文件中(若a.txt本来有内容则覆盖),若当前目录下没有a.txt文件,则新建一个

例2、cat file.txt  >> a.txt  2>  errors.log   表达的意思是: 获取file.txt文件内容输出到a.txt文件末尾,将错误信息输出到errors.log文件内

例3、cat file.txt > a.txt  2>&1   表达的意思是: 获取file.txt文件内容输出到a.txt文件中,同时将错误信息也输出到a.txt中

例4、cat file.txt >> a.txt 2>&1  表达的意思是:获取file.txt文件内容输出到a.txt文件末尾,同时将错误信息也输出到a.txt中

当然还有一个更为简单的方法可以达到刚刚例3、4中的所达到的命令

输入:cat file.txt &>>a.txt  表达的意思是:获取file.txt文件内容和错误信息输出到a.txt文件末尾

如果想将正确和错误分别输出的话,输入:【命令】>>【正确输出的文件名】  2>>【错误输入的文件名】

通过上面的例子,各位读者有没有对重定向有了一定的了解了?

接下来我们说说标准输入:

“<”:从文件中读取数据

“<<”:从键盘读取数据

例1、cat < a.txt  实现的效果和 cat a.txt 没有任何区别,区别之处在于原理不同。

cat a.txt :cat命令打开文件,然后打印文件内容

cat < a.txt :cat命令只负责打印内容,打开文件并将a.txt内的内容交给cat命令的工作是终端完成

例2、sort -n << end   可以实现:输入之后将可以在终端进行输入数据(输入一个按一次回车),输入完毕之后,输入end即可结束输入,终端则将刚刚的数据排序并输出

例3、sort  -n << end > sortnumber.txt 2>&1  可以实现:将例2的输出输出到sortnumber.txt文件中(包括错误)

现在我们已经明白如何将输出输出到终端,文件了。那么命令是怎么回事?如何输入呢?

这个就涉及到我们这个部分的第二个重点:管道,符号为“|”

其意思是,将“|”符号之前的命令执行完后,作为符号后的命令的参数输入到命令中

是不是看不懂?为了帮助我们进一步了解管道命令,我们先来学习一个新的命令:cut   和一个新的文件格式.csv文件(逗号分隔值文件)

注:不一定必须是逗号,也可以是其余的任何符号,如:!?。等

首先,我们说一下.csv文件,其中的内容用特定的符号进行分割,例如a.csv:

12,121/121,121

13,13/13,13

45,45/45,45

678,678/678,678

cut命令:对文件进行剪切

常用格式:

cut -c 【字符范围】【文件名】  例如: cut -c 2-4 a.txt   意思是:将a.txt文件中每行第二到第四字符的数据剪切出来,输出到终端

cut -d 【分隔字符】-f 【第几段】 【文件名】

例如:cut -d , -f 2 a.csv   假设a.csv内的内容如刚刚举例所说,剪切a.csv文件中以“,”号为分隔符分隔的第二段内容,则输出:

121/121

13/13

45/45

678/678

接下来我们就可以结合强大的管道命令,来实现一些较为复杂,在windows下需要很多操作的事情

例如:
cut -d , -f 1 a.csv | sort -n > sortnumber.txt

意思是:剪切a.csv中以“,”号为分隔符分隔的第一段内容,再按数字大小排序,输出大sortnumber.txt文件中,其结果为:

13

45

121

678

不得不说,这个部分的内容不仅灵活,而且多

不过如果学好了,我觉得对于文件的操作将会远超在windows下对文件的操作速度。

Linux命令行学习之路(六)——重定向和管道相关推荐

  1. Linux 命令行学习之路 -- 3.复制文件 cp

    版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/qq_38812171 定义:cp is short for copy, 意为复制文件.用于将文件或目录 ...

  2. linux命令行学习游戏,如何在Linux命令行中下载GOG游戏

    如果你是一个游戏玩家同时也是一个Linux用户,你可能很高兴在GOG在几个月前宣布它会在你最喜欢的操作系统上推出游戏.如果你之前从来没有听说过GOG,我鼓励你看看他们的产品目录中的"很棒的老 ...

  3. linux命令行看图工具,六个鲜为人知的超酷Unix/Linux命令

    师徒对话:kibitz kibitz是一个终端工具,它主要用于让一个"师父(master)"来帮助他/她的"徒弟(apprentice)".从本质上来说,它是通 ...

  4. 原版英文书籍《Linux命令行》阅读记录6 | 重定向

    重定向,回忆一下这个概念是不是之前学过:在 Java web 开发中请求的重定向.在本章节中,我们要学的是"IO重定向".本文将从以下命令开始展开: cat sort uniq g ...

  5. linux进程控制命令行,linux命令行学习(37):控制进程的方法

    一.中断进程用ctrl+c,暂停进程用ctrl+z 二.使程序在后台运行,在命令后面加& 三.查看终端启动的所有作业 ,用命令jobs 四.将后台运行的程序切换到前台,使用命令fg %.作业编 ...

  6. linux 在终端修改文件,linux命令行学习(42):修改.bashrc文件

    可以通过修改启动文件改变环境. 下面通过修改.bashrc来改变环境,具体地说,就是在.bashrc中加入四条命令. 一..bashrc文件中原有的内容 我的centos系统中,普通用户主目录中的.b ...

  7. linux命令行提示符居中,linux命令行学习(54):修改提示符

    提示符由环境变量PS1决定,所以,修改提示符就是修PS1的值. 一.保存PS1原来的值以及恢复原值 为了防止麻烦,在修改PS1的值之前,可以先将PS1的值保存起来,以备以后恢复. 我们建立一个环境变量 ...

  8. Linux 命令行学习(持续更新中)

    ctrl + f       查找      (文档中/软件中都能用) find ./  -name "..." grep -r "...." * (-r  表 ...

  9. 《Linux命令行大全》学习笔记1——学习 Shell

    文章目录 前言 一.什么是Shell 二.导航 三.探索 Linux 系统 ls file less 四.操作文件和目录 通配符 mkdir cp mv rm ln 五.和命令打交道 六.重定向 标准 ...

最新文章

  1. php access 插入,如何使用PHP將附件插入Access數據庫?
  2. Dockerfile 部署Djano项目
  3. python测试用例管理模块_Python的单元测试模块如何检测测试用例?
  4. 图像标注技巧_保护互联网上图像的一个简单技巧
  5. Intellij IDEA展示类中的方法树形结构
  6. 在生成.net core 3.0程序时不包含nuget库
  7. conda虚拟环境中使用pip仍然安装到全局python中
  8. python经典书籍推荐:Python面向对象编程指南 : Mastering Object-oriented
  9. Java实现Oracle数据库备份
  10. logistic回归 简介_从零实现机器学习算法(四)Logistic回归
  11. java JDK11对比JDK8
  12. GokeAudio是一款简约小巧的开源安卓SIP软电话客户端
  13. 《深度工作》学习总结
  14. Java——正三角、倒三角、菱形打印
  15. 计算机弹奏简谱成都,赵雷《成都》简谱,分享给大家
  16. 建立时间保持时间及违例如何处理,求最大时钟频率
  17. 如何使用百度地图API
  18. Google全系列产品不再信任赛门铁克某款根证书
  19. 【内网穿透】通过WebDAV服务访问群晖NAS文件
  20. 查错秘籍—PHP大法

热门文章

  1. 教你重拾职场激情的妙计锦囊
  2. 如何在 XMind 中绘制流程图?
  3. 实变函数与泛函分析课本pdf_实变函数与泛函分析基础(第三版)同步辅导及习题全解...
  4. 深耕图形服务,HMS Core 5.0携手开发者共创视觉盛宴
  5. bootstrap学习(七):跟着宝哥学java:bootstrap表格显示图片
  6. android默认安装位置,修改Android手机的软件默认安装位置
  7. 基于逻辑回归和耦合分析得快递网点末端分析
  8. Docker搭建私有Rap2
  9. css 锥形渐变实现仪表盘
  10. 怎么把动图放到word里_WORD中如何插入动态图片