Linux系统中,有4个特殊符号 < > | - 在我们处理输入和输出时存在重要但具有迷惑性的作用
- > 表示重定向 , >filename就是把标准输出村存储到文件filename里面,标准错误错误还是会显示在屏幕上。
- 2 >&1 表示把标准错误重定向到标准输出。Linux终端用2表示标准错误,1表示标准输出。
- -(短横线) 表示标准输入,一般用于一个程序需要多个输入的时候。
- < 标准输入,后面可以跟产生输出的命令,一般用于一个程序需要多个输入的时候,相比-适用范围更广
- | 管道符,表示把前一个命令的输出作为后一个命令的输入。用于数据在不同的命令之间传输,用途是减少硬盘存取损耗。
#! /bin/bash echo "I am std output" #下面是随笔写的一个理论上不存在的命令,会报错 unexisted_command #输出 #I am std output #stdout_error.sh: 行 4: unexisted_command:未找到命令
cat <<END | diff - <(echo "1 2 3" | tr ' ' '\n') >2 >2 >4 >END 0a1 >1 3d3 <4 #diff是比较两个文件的差异,需要两个参数 #-(短横线)表示上一个命令的参数,传递给diff #< 表示其后的命令的输出,也重定向给diff
管道符的更多应用
echo "actgaaaaacccccg" | tr ' ' '\n' | wc -l >3 echo "a b c" | tr ' ' '\n' | sed = 1 a 2 b 3 c #sed = :先输出行号,再输出每行内容 echo "actg aaaaa ccccg" | tr ' ' '\n' | sed = | sed 'N;s/\n/\t/g' >1 actg >2 aaaaa >3 cccccg #N表示读入下一行;sed命令每次只读一行,加上N;之后,就是缓存了第二行 #s:替换