linux下的标准输入、输出、重定向、管道在Linux系统中,有4个特殊的符号,<, ‘>’, ‘|’, ‘-‘,在我们处理输入和输出时存在重要但具有迷惑性的作用 。
默认Linux的命令的结果都是输出到标准输出,错误信息 (比如命令未找到或文件格式识别错误等) 输出到标准错误,而标准输出和标准错误默认都会显示到屏幕上 。
>表示重定向标准输出,> filename就是把标准输出存储到文件filename里面 。标准错误还是会显示在屏幕上 。
2 >&1 表示把标准错误重定向到标准输出 。Linux终端用2表示标准错误,1表示标准输出 。
- (短横线):表示标准输入,一般用于1个程序需要多个输入的时候 。
<标准输入,后面可以跟可以产生输出的命令,一般用于1个程序需要多个输入的时候 。
|管道符,表示把前一个命令的输出作为后一个命令的输入,前面也有一些展示例子 。用于数据在不同的命令之间传输,用途是减少硬盘存取损耗 。
下面我们通过一个程序stdout_error.sh来解释上面的文字,内容如下
#!/bin/bashecho "I am std output" # 下面是随便写的一个理论上不存在的命令, 理论上会报错的 。unexisted_command运行这个脚本
# 标准输出和标准错误默认都会显示到屏幕上ct@ehbio:~$ bash stdout_error.sh I am std outputstdout_error.sh: line 5: unexisted_command: command not found# >把结果输入到了文件;标准错误还显示在屏幕上ct@ehbio:~$ bash stdout_error.sh >stdout_error.stdoutstdout_error.sh: line 5: unexisted_command: command not foundct@ehbio:~$ cat stdout_error.stdoutI am std output# >把结果输入到了文件; 2>把标准错误输入到了另一个文件ct@ehbio:~$ bash stdout_error.sh >stdout_error.stdout 2>stdout_error.stderrct@ehbio:~$ cat stdout_error.stderrstdout_error.sh: line 5: unexisted_command: command not found# 标准输出和标准错误写入同一个文件ct@ehbio:~$ bash stdout_error.sh >stdout_error.stdout 2>&1ct@ehbio:~$ cat stdout_error.stdoutI am std outputstdout_error.sh: line 5: unexisted_command: command not found下面看管道符和标准输入的使用 。
# 管道符的使用# 第一个命令的输出作为第二个的输入# 前面的例子中也有使用# tr: 是用于替换字符的,把空格替换为换行,文字就从一行变为了一列ct@ehbio:~$ echo "1 2 3" | tr ' ' 'n'123# cat命令之前也用过,输出一段文字# diff是比较2个文件的差异的,需要2个参数# - (短横线)表示上一个命令的输出,传递给diff# < 表示其后的命令的输出,也重定向给diffct@ehbio:~$ cat <<END | diff - <(echo "1 2 3" | tr ' ' 'n')> 2> 3> 4> END0a1> 13d3< 4# 如果不使用管道和重定向标准输入,程序是这么写的# 先把第一部分存储为1个文件ct@ehbio:~$ cat <<END >firstfile23> 4> ENDct@ehbio:~$ less firstfile # 再把第二部分存储为1个文件ct@ehbio:~$ echo "1 2 3" | tr ' ' 'n' >secondfile# 然后比较ct@ehbio:~$ diff firstfile secondfile 0a1> 13d3< 4管道符的更多应用
ct@ehbio:~$ echo "actg aaaaa cccccg" | tr ' ' 'n' | wc -l3# sed =:先输出行号,再输出每行的内容ct@ehbio:~$ echo "a b c" | tr ' ' 'n' | sed = 1a2b3c# 后面这个命令不太好解释# sed = 同时输出行号# N: 表示读入下一行;sed命令每次只读一行,加上N之后就是缓存了第2行,所有的操作都针对第一行;# s: 替换;把换行符替换为tct@ehbio:~$ echo "a b c" | tr ' ' 'n' | sed = | sed 'N;s/n/t/' 1 a2 b3 c# 后面这个命令不太好解释# sed = 同时输出行号# N: 表示读入下一行;sed命令每次只读一行,加上N之后就是缓存了第2行,所有的操作都针对第一行;# s: 替换;把读取的奇数行行首加一个'>'(偶数行相当于被隐藏了)ct@ehbio:~$ echo "a b c" | tr ' ' 'n' | sed = | sed 'N;s/^/>/' >1a>2b>3c# 把多条序列转成FATSA格式# sed = 同时输出行号# N: 表示读入下一行;sed命令每次只读一行,加上N之后就是缓存了第2行,所有的操作都针对第一行;# s: 替换;把读取的奇数行行首加一个'>'(偶数行相当于被隐藏了)# 于是FASTA格式序列就出来了ct@ehbio:~$ echo "actg aaaaa cccccg" | tr ' ' 'n' | sed = | sed 'N;s/^/>/' >1actg>2aaaaa>3cccccg
【Linux学习 - 管道、标准输入输出】
推荐阅读
- linux文件夹权限修改 设置文件夹权
- 学党史学习教育活动横幅标语有哪些?
- 电池|比亚迪回应“车不好看”:特斯拉是学习的榜样
- 高考满分英语作文范文 关于学习的英语作文
- 学跳舞的技巧 舞蹈学
- 文秘专业主要学什么?
- 生活污水和粪便是一个管道吗 生活污水和粪便是不是一个管道
- 学习心得体会格式 学习心得格式
- 学习电脑知识电脑技术大全 电脑知识
- 学习方法 六种高效的学习方法 学习法
