Linux命令- echo、grep 、重定向、1>&2、2>&1的介绍
最近笔试遇到一道题,关于Linux命令的,题目如下
下面两条命令分别会有怎样的输出
echo hello 1>&2 |grep aaa
echo hello 2>&1 |grep aaa
A、两个均输出hello B、第一个无输出,第二个输出 hello C、第一个输出hello,第二个无输出 D、两个均输出hello
思考了几分钟,选了C。正所谓参差不齐就选C,emmm其实是瞎选的,1>&2这个知识点博主忘了,所以今天就来复习一下
echo
功能:显示器上显示一段文字,一般起到一个提示的作用。
参数:-b 表示删除前面的空格 -n 表示换行 -t 表示水平制表符 -v 表示垂直制表符 -c 后面的字符将不会输出,同一时候,输出完毕后也不会换行 -r 输出回车符(可是你会发现\r前面的字符没有了) -a 表示输出一个警告声音
[chen@localhost media]$ echo hello
hello
[chen@localhost media]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/chen/.local/bin:/home/chen/bin
grep
功能:文本过滤工具,是 Linux 系统中最重要的命令之一,其功能是从文本文件或管道数据流中筛选匹配的行及数据
参数 :-n : 显示匹配的行号及行
-i : 不区分大小写
-c : 只输出匹配的行数
-h : 查询多文件时不显示文件名
-l : 查询多文件时, 只输出包含匹配字符的文件名
-v : 显示不包含匹配文本的所有行
[chen@localhost media]$ grep int new1.c
int data;
int compare(const void *p, const void *q) {
int const *a = (int const *)p;
int const *b = (int const *)q;
int show(int *p, int n) {
int i = 0;
printf("%d ", p[i]);
int input(int *p, int n) {
int i = 0;
int main()
int p[100] = { 0 };
[chen@localhost media]$ grep -n int new1.c
8: int data;
13:int compare(const void *p, const void *q) {
14: int const *a = (int const *)p;
15: int const *b = (int const *)q;
25:int show(int *p, int n) {
26: int i = 0;
28: printf("%d ", p[i]);
33:int input(int *p, int n) {
34: int i = 0;
42:int main()
44: int p[100] = { 0 };
[chen@localhost media]$ grep -c int new1.c
11
重定向
定义:Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作。
重定向输入就是让程序使用文件而不是键盘来输入,重定向输出就是让程序输出至文件而不是屏幕
I/O重定向通常与 FD 有关,shell的FD通常为10个,即 0~9;
重点:常用 FD有3个,为 0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出)
用 < 来改变读进的数据信道(stdin),使之从指定的档案读进
用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的;
[chen@localhost media]$ vim file.c//创建一个空文件
[chen@localhost media]$ echo hello > file.c //输出hello到空文件中
[chen@localhost media]$ cat file.c //文件就存了hello
hello
[chen@localhost media]$ > file.c //快速清空文件内容的快捷键就是基于这个输出重定向来完成的 1> file.c 也是同样的作用
[chen@localhost media]$ cat file.c //文件里的hello已经被清空
[chen@localhost media]$
FD 2 错误输出,就是当输出错误时,用 2> 可以输出错误的返回值
[chen@localhost media]$ cat file.c
[chen@localhost media]$ hello 2> file.c //将错误信息重定向输出到file.c文件,而不是显示在屏幕上
[chen@localhost media]$ cat file.c
bash: hello: 未找到命令...
[chen@localhost media]$
&是文件描述符,&2 表示错误通道2,echo hello 1>&2 表示hello 重定向输出到错误通道2
回忆一下,我们在终端敲命令错误屏幕就会报错,我们把屏幕报错显示的地方当成错误通道2就容易理解了
如果不加&2 直接 echo hello 1>2 就变成hello 重定向输出到2这个文件里去了,如果没有2,系统就自动创建一个2
[chen@localhost file]$ ls
file.c
[chen@localhost file]$ echo hello 1>&2 //hello 重定向输出到错误通道2,也就是终端屏幕
hello
[chen@localhost file]$ echo hello 1>2 //hello 重定向输出到2这个文件中去
[chen@localhost file]$ ls
2 file.c
[chen@localhost file]$ cat 2
hello
[chen@localhost file]$
讲到这里相信对重定向也有一定的理解了吧,下面回到开头那道题
下面两条命令分别会有怎样的输出
echo hello 1>&2 |grep aaa
echo hello 2>&1 |grep aaa
答:第一个输出hello,第二个无输出,解析如下
1>&2 将正确输出重定向到标准错误2通道
2>&1 将错误输出重定向到标准输出1通道
echo hello 1>&2 后面跟了一个 | grep aaa
| 是管道,意思就是将第一条指令的结果放到第二条指令中,管道命令右边只处理左边的标准正确输出,也就是通道1
echo hello 1>&2 将结果输出到错误2通道,也就是在终端屏幕上显示hello,而标准输出1通道没有值,| grep aaa 搜素左边传来的标准输出通道1的结果,发现没有aaa,所以没有输出,最终屏幕只显示一个hello
echo hello 2>&1 将错误返回值输出到标准1通道,不过该语句正确,没有错误,通道2也就为空,屏幕没有显示,| grep aaa 搜素左边传来的标准输出通道1的结果,通道1有hello 但是没有 aaa 所以没有输出,所以屏幕没有显示
再帮大家加深一下,如果换一下,改成 echo hello 1>&2 | grep e 和 echo hello 2>&1 | grep e 呢?
echo hello 1>&2 将正确结果hello输出到错误2通道,也就是在终端屏幕上显示hello,而标准输出1通道没有值,| grep aaa 搜素左边传来的标准输出通道1的结果,发现没有hello,所以没有输出,最终屏幕只显示一个hello
echo hello 2>&1 将错误返回值输出到标准1通道,不过该语句正确,没有错误,通道2也就为空,屏幕没有显示,| grep aaa 搜素左边传来的标准输出通道1的结果,发现有e,所以输出hello
通道2会在屏幕上显示,通道1不会在屏幕上显示,记住这句话,这句话是针对管道的第一个命令,大家别误解了,把管道命令左边命令的通道1的值给右边命令,右边命令再输出,如果正确,输出通道1,错误,输出通道2
这就是我对重定向 ,1>&2 , 2>&1 的理解,有什么不对的大家也可以提出来一起讨论
-------------------------------------------------------------------------------
转载请注明出处、作者 ,谢谢
Linux命令- echo、grep 、重定向、1>&2、2>&1的介绍的更多相关文章
- 每天学点Linux命令之grep 和 wc命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expr ession Print,表示全局正则表 ...
- 每天学点Linux命令之grep 和 wc命令 ---(6/25)
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- 每天学点Linux命令之grep 和 wc命令 --- !管道命令!
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expr ession Print,表示全局正则表 ...
- linux命令echo和cat比较
当前主要比较echo 和 cat的重定向功能 1.echo 1 > /proc/xxx 解析: echo 进行重定向的时候,仅仅是将字符"1" 输出到 /proc/xxx文件 ...
- Linux命令echo -e
在Linux命令中 echo -e 这个参数e是什么意思. echo –e “I will use ‘touch’ command to create 3 files.” 这里参数e的作用是什么 ma ...
- 【linux命令】grep
1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局 ...
- linux命令之grep用法介绍
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- 每天一个linux命令(51)--grep命令
linux系统中grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep 全称是 global regular expression print,表示全局正则 ...
- 【Linux命令】grep命令
1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全 ...
随机推荐
- leadcode的Hot100系列--78. 子集--位运算
看一个数组的子集有多少,其实就是排列组合, 比如:[0,1] 对应的子集有:[] [0] [1] [1,1] 这四种. 一般对应有两种方法:位运算 和 回溯. 这里先使用位运算来做. 位运算 一个长度 ...
- 关于c++中的Debug以及runtime_error之segment_fault
差不多每次编一些竞赛类的程序都会至少给我报一次runtime_error(运行时错误).这或许也是广大OIer心中永远的痛.~_~ 本文主要讨论如何对runtime_error以及其中的segment ...
- 使用SSH+SFTP操作终端全解析,告别XShell
1.前言 在Windows系统下操作远程服务器的方式很多,比如XShell+XFTP组合,亦或是PuTTY+WinSCP组合,但在Mac系统下登陆远程服务器,并没有这些工具供我们使用.相比较而言,在M ...
- HDU 4462:Scaring the Birds(暴力枚举+状态压缩)
http://acm.hdu.edu.cn/showproblem.php?pid=4462 题意:有一个n*n的地图,有k个空地可以放稻草人,给出每个空地可以放的稻草人属性,属性中有个R代表这个位置 ...
- jieba GitHUb 结巴分词
1.GitHub jieba-analysis 结巴分词: https://github.com/fxsjy/jieba 2.jieba-analysis 结巴分词(java版): https://g ...
- [深度学习]TensorFlow安装
virtualenv 可以用来建立一个专属于项目的python环境,保持一个干净的环境.只需要通过命令创建一个虚拟环境,不用的时候通过命令退出,删除.实践证明用虚拟环境能避免很多糟心的事. 下面介绍一 ...
- 为什么QQ能上却打不开网页呢?
互联网是一个复杂又有趣的玩意儿,接下来我来分享一个案例: 网页打不开,但奇怪的是QQ可以正常使用??? 网页打不开的原因:电脑上Tcp/IP设置中没有使用自动分配的DNS服务器,而且自行设定的DNS服 ...
- 1. Python 魔法方法
Python 魔法方法 基础: 如果你想... 所以,你写... Python调用... 初始化一个实例 x = MyClass() x.__init__() 作为一个字符串的"官方&quo ...
- 树链剖分 [JLOI2014]松鼠的新家
[JLOI2014]松鼠的新家 时间限制: 1 Sec 内存限制: 128 MB 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达, ...
- ~~番外:说说Python 面向对象编程~~
进击のpython Python 是支持面向对象的 很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高 但是如果你写的多了或者某一对象非常复杂了,其中的一些写法会相当相当繁琐 而且我们 ...