目录
1.1 standard output 与 standard error output
2.4 字符转换命令:tr,col,join,paste,expand
1.数据流重导向
1.1 standard output 与 standard error output
在执行命令后,会有指令回传的正确信息即标准输出(standard output),或指令执行错误回传的错误信息,即标准错误输出(standard error output).无论执行正确或是错误,都有信息输出到屏幕上.可以利用某种机制将这部分信息分开/合并传送到其他文件或装置中,就是利用数据重导向,而所需的特殊字符如下:
- 标准输入stdin:代码[0],使用<或<<
- 标准输出stdout:代码[1],使用>或>>
- 标准错误输出stderr:代码[2],使用2>或2>>
如执行 [ll / > ~/rootfile] 指令后,原本的目录输出不见了:
- 若~/rootfile不存在,系统会建立该文件
- 若~/rootfile存在,系统会清空该文件后写入数据
执行 [ll / >> ~/rootfile] (是两个>)指令后,
- 若~/rootfile不存在,系统会建立该文件
- 若~/rootfile存在,系统会在该文件后边追加
标准错误输出stderr的使用与标准输出类似,只是使用2>和2>>,也就是:
- 1>:以覆盖的方法将正确的数据,输出到指定的文件或装置上去
- 1>>:以追加的方法将正确的数据,输出到指定的文件或装置上去
- 2>:以覆盖的方法将错误的数据,输出到指定的文件或装置上去
- 2>>:以追加的方法将错误的数据,输出到指定的文件或装置上去
将正确和错误的信息分别保存到不同的文件
1.2 /dev/null 垃圾桶黑洞
如果你的标准输出或标准错误输出不想输出到屏幕上也不想保存在文件中,就将它输出到/dev/null中去
如果想将标准输出和标准错误输出存到一个文件中去,有3种选择:
- &>
- 1>&2
- 2>&1
1.3 standard input :<与<<
<是 将原本需要键盘输入的数据,改由文件内容输入
几个有用的例子:
1.4 命令执行的判断依据 : &&,||
&&与||的正确使用通过指令回传值[$?=0]来判断的
2 管线命令
管线命令使用[|]界定符号,它仅能够处理由前一个命令执行后的标准输出信息.如 [ll / | less],示意图如下:
每个管线后直接接的必须是指令,而且这个指令必须有接受标准输入的能力.这样的命令才是管线命令.
- 管线命令仅会处理stdout数据,对stderr忽略
- 管线命令必须要能够接受来自前一个指令的数据成为stdin继续进行处理
如若想让前一个命令的stderr被管线命令继续处理可使用 2>&1 ,将标准错误信息变成标准信息
2.1 撷取命令 cut ,grep
撷取信息一般是针对一行一行来分析
cut
以行为单位.| cut -c 4- 撷取每行第4个字符后的数据 | cut -c 4- 撷取每行前4个字符
grep
分析每行信息,将符合要求的一整行取出.
2.2 排序命令 : sort ,wc ,uniq
sort
排序的字符与语系编码有关,可以用LANG=C统一语系再进行排序
uniq 分组
wc 统计
2.3 双重重导向 tee
对标准输出一边存一边处理
2.4 字符转换命令:tr,col,join,paste,expand
tr
删除或替换信息中的文字
col
将[tab]取代成空格键
join
将两个文件中,有相同数据的那一行连接在一起
paste
将两行数据连接在一起,以[tab]隔开
expand
将[tab]转成空格
2.4 分区命令 split
将大文件分成多个小文件
2.5 参数代换:xargs
产生某个指令的参数,读入stdin数据,以空格或断行符作为判断.
2.6 减号的用途
在管线命令中,常常需要前一个命令的stdout作为stdin,某些指令需要用到文件名(如tar)进行处理,该stdout,stdin可用[-]替代