今天我们来总结一下个人认为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. threejs 纹理流动_Threejs多重纹理与过程纹理实现
  2. 第83天:jQuery中操作form表单
  3. python评估不平衡数据集_Python Pandas:平衡不平衡的数据集(用于面板分析)
  4. 2019年1月16日【第三天学习】
  5. redis发布订阅c接口_Redis 发布/订阅机制原理分析
  6. fscache 调研
  7. php简单选择题,念做个简易php选择题答题系统
  8. Python基础:字典(dict)与集合(set)
  9. 项目2:PHP抽奖程序 ,抽奖规则代码
  10. Android—API中文文档
  11. 论文评审标准有哪些?
  12. python+playwright 学习-17.模拟手机浏览器测试
  13. java基础教程(一)
  14. 如何理解空洞卷积(dilated convolution)
  15. VMware Workstation安装Win7系统
  16. 跨进程读取ListView(CListCtrl)内容
  17. 三调 图斑地类面积_图斑地类面积理论值计算方法说明
  18. Win10_64位系统安装CUDA、CUDDN、深度学习平台Paddle 、PaddleX安装总结
  19. 【C#】游戏客户端编程
  20. 【Mongodb和Solr】Mongodb和solr整合

热门文章

  1. Django项目开发纪要
  2. 浙大PAT 乙级(题号1046~1050)自解全AC Java | C++实现
  3. Markdown Preview Enhanced 开启toc技巧
  4. 手指皮肤长期干/粗糙/小裂口问题
  5. 解放右手鼠标,效率实用神器 Autohotkey 利用 Capslock 键匹配 vim 键位| Autohotkey 脚本解决 onenote 上下键问题 | Capslock++
  6. Maven——使用mvnw
  7. tidytext | 耳目一新的R-style文本分析库
  8. 宣传一下绝对耳目一新的Hybrid App框架-easyfb
  9. Git-版本控制,GitHub,Git分支
  10. 常见的串口控件(1)