程序:指令+数据
读入数据 input
输出数据 output
打开的文件都有一个fd:file descripter(文件描述符)
标准输入设备:键盘 0
标准输出设备:显示器 1
标准错误输出设备:显示器 2
I/O重定向:改变标准位置即为重定向
输出重定向: 【只重定向正确输出】
命令 > 新位置 覆盖重定向
命令 >> 新位置 追加重定向
set -C 禁止对已有文件进行覆盖输出重定向
如果需要强制覆盖,使用>|
set +C 允许对已有文件进行覆盖输出重定向
错误输出重定向 【只重定向错误输出】
2> 覆盖重定向
2>> 追加重定向
如果需要同时重定向正确输出和错误输出
可以同时指定输出重定向文件和错误输出重定向文件
例如:
使用覆盖的形式
cat 3.txt 1.txt > right.txt 2> wrong.txt
使用追加的形式
cat 3.txt 1.txt >> right.txt 2>> wrong.txt
指定为同一个文件
cat 3.txt 9.txt >> right.txt 2>> right.txt
或者使用&合并输出为同一个数据流进行重定向
&> 合并覆盖
&>> 合并追加
输入重定向
tr abc ABC
默认对于标准输入进行替换
这里我们使用 < 重定向标准输入,对源文件的内容进行替换后输出
tr abc ABC < 源文件
或者对源文件的内容进行替换后输出到新文件
tr abc ABC < 源文件 > 目标文件
比较特殊的是<< 这里不是表示追加,我们使用<<表示此处生成文档
例如:
cat << EOF
cat >> example.txt <<EOF
当我们输入其他内容的时候,将内容追加到example.txt
当我们输入EOF,则保存文件example.txt
管道:
将前一个命令的输出结果作为第二个命令的输入
第二个命令的输出作为第三个命令的出入……
注意:最后一个命令会在当前shell进程的子shell进程中执行。
命令1|命令2|命令3|……
例如:
cat test2.txt|tr test TEST
tee 目标文件
从标准输入读取数据,同时输出到标准输出和目标文件
例如:
tee a.txt
echo "$PATH" | tr 'a-z' 'A-Z' | tee b.txt
文件处理工具
wc 统计字符行数,数量,单词数量
-l line
-w words
-c character
cut 分割文件
-d 指明分隔符
-f
数字 精确的第n个部分
a,b,c a b c 部分
m-n m到n部分
混合使用 1-3,5
以= 分割文件 显示分割的第一部分
cut -d'=' -f 1 /etc/sysconfig/network-scripts/ifcfg-eth0
以= 分割文件 显示分割的第二部分
cut -d'=' -f 2 /etc/sysconfig/network-scripts/ifcfg-eth0
以= 分割文件 显示分割的第一部分和第二部分
cut -d'=' -f 1-2 /etc/sysconfig/network-scripts/ifcfg-eth0
sort 排序
默认比较每行的第一个字符,按照字母表中的升序排列
-r 降序排列
-f 忽略字符的大小写
-t 字段分隔符
-k 以指定字段为标准排序
以=作为分隔符 以第一个部分作为标准进行排序
sort -t= -k1 /etc/sysconfig/network-scripts/ifcfg-eth0
以=作为分隔符 以第二个部分作为标准进行排序
sort -t= -k1 /etc/sysconfig/network-scripts/ifcfg-eth0
-n 以数值大小排序 (默认是以字符排序)
-u 排序后去重
获取history中的命令并去重
history |cut -d' ' -f5|sort -u
uniq命令
-c 显示每行重复出现的次数
-d 仅显示重复过的行
-u 仅显示不曾重复的行
获取history中的命令以及重复次数
history |cut -d' ' -f5|sort|uniq -c
提示:uniq 不会检查重复的行,除非它们是相邻的行。
如果您想先对输入排序,使用没有uniq 的"sort -u"。