bash的IO重定向及管道
程序:指令+数据(数据结构+算法)
读入数据:input
输出数据:output
打开的文件都有一个fd:file descriptor(文件描述符)
标准输入:keyborad,0
标准输出:monitor,1
标准错误输出:monitor,2
I/O重定向:改变标准位置
输出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS
>:覆盖重定向,目标文件中的原有内容会被清除
>>:追加重定向,将原文件中的内容追加到目标文件末尾
# set -C:禁止将内容覆盖输出至已有文件中
强制覆盖:>|
# set +C:取消禁止将内容覆盖输出至已有文件中
2>:覆盖重定向错误输出数据流
2>>:追加重定向错误输出数据流
标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.suc 2>/path/to/file.err
合并标准输出和错误输出为同一个数据流进行重定向
&>:覆盖重定向
&>>:追加重定向
COMMAND > /path/to/file 2>&1 :将错误输出覆盖重定向至/path/to/file中
COMMAND >> /path/to/file 2>>&1
输入重定向:<
tr命令:转换或删除字符
tr [OPTION]... SET1 [SET2]
tr abc ABC < /etc/fstab :以/etc/fstab作为输入,并将其输入数据流中小写abc替换为大写ABC
HERE Documentation:<<
(1)cat << EOF
>1111111
>2222222
>EOF
(2)cat >>/tmp/test<<EOF
>
追加或覆盖输入内容至/tmp/test中
管道:前一个命令的结果当做后一个命令的输入
COMMAND1 | COMMAND2 | COMMAND3|......
Note:最后一个命令会在当前shell进程的子shell进程中执行
tee:
tee [OPTION]... [FILE]...
# tee 1.out
123
123
456
456
^C
# cat 1.out
123
456
#
一路输入,两路输出
文本处理工具:wc,cut,sort,uniq
wc命令:
wc [OPTION]... [FILE]...
wc -l 文件名 行数
wc -c 文件名 字节数 set list显示换行符
wc -w 文件名 连续到字符串(单词)
cat -n /etc/passwd | head -20 | tail -2 | rev | tac (rev 左右颠倒 tac颠倒)
cut命令:
cut [OPTION]... [FILE]...
-d DELIMITER:指明分隔符
-f FILEDS:
#:第#个字段
#,#[,#]:离散的多个字段:例如1,3,6
#-#:连续的多个字段:例如1-6
1-3,7:混合使用
--output-delimiter=STRING:指明分隔的字段
cut -d: -f1 /etc/passwd | head -5
cut -d: -f1,3,5 /etc/passwd | head -5
cut -d: -f1-3 /etc/passwd | head -5
cut -c 1 /etc/passwd | head -5
cut -c 1,2,3 /etc/passwd | head -5
cut -c 1-4 /etc/passwd | head -5
cut -d: -f1-3 --output-delimiter=‘ ‘ /etc/passwd
sort命令:排序
sort [OPTION]... [FILE]...
sort 默认按首字符排序
sort -n 按数值大小排序
sort -u (uniq)去掉重复行
sort -r 降序排序
sort -f 忽略字符大小写
sort -t DELIMITER:字段分隔符
sort -k #:以#字段为标准排序
uniq命令:默认去掉连续且完全相同的行
uniq [OPTION]... [FILE]...
uniq -d 显示重复行
uniq -u 显示不重复行
uniq -c 统计重复次数
练习:以冒号分隔,取出/etc/passwd文件的第6至第10行,并将这些信息按第3个字段的数值大小进行排序,最后仅显示各自的第一个字段。
# sed -n ‘6,10p‘ /etc/passwd | sort -t: -k3 | cut -d: -f1
原文地址:http://sanyuan.blog.51cto.com/873226/1974865