重定向和管道符
- 重定向--tr
程序 = 指令+数据
命令 变量
数据输入:键盘--标准输入,但是并不是唯一输入方式
--stdin
echo “123456”|passwd--stdin”username”
while line(变量);do
循环体
done < /etc/passwd
数据输出:显示器---标准输出,但是并不是唯一输入方式
ls /etc/ > a.txt
fd文件标识符0-9
0 1 2
0--标注输出
1--标准输入
2--错误输入输出(标准错误)
常见重定向符号
1、标准输出
> 覆盖重定向、非常危险
set-C 去掉覆盖重定向功能
set+C 不去掉覆盖重定向功能
>| 强制重定向
>> 追加重定向(不覆盖)
2、标准输入
< 把后面的内容交给前面的内容 tr:替换
tr set1[set2] < file.txt
<< cat将多行数据同时输入
cat >>a.txt << EOF
>1
>2
>3
>EOF
3、错误输出
2> 2>>
拓展:不需要输出内容只需要输出状态;
ls /etc/ > /dev/null
if[ $? -eq 0];then
循环体
fi
&> &>> == 2&>1
ls /etc/&> /dev/null
- 管道 -tee
command1 | command2 | command3|.....
前一个命令的执行结果交给后一个命令来执行;
结合小功能实现大功能
提取219:
free -m|grep”^Mem”|cut -d’ ‘ -f19
free -m|grep”^Mem”|awk’{print $3}’
Tee
一路输入两路输出(屏幕输出一次保存一次)如果没有文件会创建默认如果文件存在内容会覆盖
tee /tmp/tee.out
- 文本处理工具 - wc,cut,sort,uniq
cut 文件分割
-b 切割字节
-c 字符
-d 指定分隔符(delimiter)-d[:]
-f 提取哪一列
-f1 第一列
-f1-3 1-3列
-f1,3 1和3列
- -output - delimeter=’xx’
局限性:1.-d指定分隔符不能同时指定多个
2.不能做高级格式化输出
wc word count 统计文本文件中的字符个数
用法:wc filename
-l 行数
-w 字符个数
-c 文件大小
文件名
uniq 去重 处理相邻的重复行(连续且相同)建议先排序后去重
-c 统计某些字符重复的次数 sort filename |uniq -c
-d 显示重复的行
-u 显示不重复的行
uniq -c a.txt 显示行数
sort 按阿斯克码排序 默认查看第一个字符 包括数字字母空格和特殊符号
-r 逆序
-f忽略字符大小写
-u uniq 排序去重重复的不显示
-n 指定以数值大小的进行排序
-t delimiter指定字符段分隔符 cut-d
-k #已定字段的第几段进行排序 cut-f
cat b.txt | sort -n(升序)/-nr(降序)
sort a.txt |uniq -c |sort -nr |head -1 显示出现次数最多的一行
1.将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中
head -5 /etc/passwd|tr[a-z] [A-Z]>/tmp/passwd.out
2.将登陆至当前系统上的用户信息汇总后3位信息转换为大写后保存至/tmp/who.out文件中
who |tail -3|cut -d’ ‘-f1|tr[:lower:][:upper:]|tee /tmp/who.out
tail 查看文件尾部行数默认10行
-n 指定查看几行(tail -n 5/etc/passwd==tail -5/etc/passwd)
-f 实时查看文件更新内容
tail -f /var/log/message
head 查看文件头部多少行(默认10行)
-n #前#行,简写-#
取10- 20行: head-20 /etc/passwd|tail -10
取出/etc/passwd文件中的第6到10行,将这些信息按照3个字段的数值大小进行排序,最后仅显示各自的第一个字段: head /etc/passwd |tail -5 |sort -t: -k3 -n | cut -d":" -f1