Shell_01_数据处理
@
数据处理
重定向/管道
重定向
文件描述符(File Descriptor):Linux表示每个文件对象的正整数
1)单个进程每次最多可有9个文件描述符;
2)Linux默认保留0、1和2文件描述符(用户可自定义6~8);
临时重定向
输出重定向:将命令的执行结果保存到特定的文件或设备中
1)Linux中默认的命令执行后输出到终端
2)指令格式:指令 重定向 文件的路径
标准输出(standard output)stdout:代码为1
> | >> |
---|---|
覆盖输出 会覆盖掉原先的文件内容 | 追加输出 在已有的文件内容末尾继续添加 |
1)也可表示为1>或1>>,默认将“1”省略
2)若指定文件不存在,系统会建立该文件
如:使用ls -la查询“/”后导入ls.txt文件
标准错误输出(standard error output)stderr:代码为2
2> | 2>> |
---|---|
覆盖输出 会覆盖掉原先的文件内容 | 追加输出 在已有的文件内容末尾继续添加 |
//数字2不能省略(用于区分标准输出)
如:查询/home下所有.bashrc文件,并分别输出到list1和list2文件
stdout | stderr | |
---|---|---|
区别 | 命令执行成功后 返回的正确信息 | 命令执行失败后 返回的错误信息 |
//stdout和stderr不能使用对方的输出重定向符号
//若把运行成功和运行失败的数据写在同一文件内,需使用特殊的语法“&>”
如:查询/home下所有.bashrc文件并把结果输入到list文件
//两股数据若同时写入一个,应使用特殊的语法,若不用“&>”就会导致交叉写入或数据丢失
/dev/null:Linux的回收站(黑洞)
1)设备/dev/null可以消化任何导向该设备的信息
输入重定向:指定文件或设备上输入数据
标准输入(standard input)stdin:代码为0
< | << 分界符 |
---|---|
文件内容代替键盘输入 | 遇到分界符才停止输入 |
如:使用输入重定向发送mail给mwl用户
tee命令:双向重定向
指令格式:tee 选项 文件路径
1)将数据流分别发送到终端和文件(默认以覆盖的形式写入文件)
选项 | 含义 |
---|---|
-a | 以追加的方式写入文件 |
-i | 忽略中断信号 |
如:输出$PATH变量地址并保存到/root/test/test2.txt文件
永久重定向
exec命令:实现Shell脚本中片段的永久重定向
指令格式:exec 重定向格式
1)在exec命令指定重定向后的输出信息,则保存至exec指定的位置;
//在exec命令指定前的,则按照默认输出保存(或按照上一个exec指定保存)
如:通过exec命令实现永久输出重定向
1)编写test19.sh脚本文件
2)调用test19.sh脚本文件
如:通过exec命令实现永久输入重定向
1)编写test20.sh脚本文件
2)调用test20.sh脚本文件
自定义重定向
exec命令:自定义输出/输入重定向
指令格式:exec 数字描述符和重定向方式
1)文件描述符可存储其他文件描述符的重定向属性
如:创建描述符3的输出重定向
1)编写test21.sh脚本文件;
2)调用test21.sh脚本文件
//没有指定自定义输出重定向,则默认输出到stdout(或上一个永久重定向)
如:通过exec命令实现记录其他文件描述符的属性
1)编写test22.sh脚本文件
2)调用test22.sh脚本文件
mktemp命令:在当前目录下创建文档
指令格式:mktemp 选项 文档前缀名.XXXXXX
选项 | 含义 |
---|---|
-t | 在/tmp目录下创建文档 |
-d | 创建目录 (默认创建文件) |
1)创建的文档不受umask限制,仅属主拥有rw权限;
2)系统会随机填充“XXXXXX”,以实现创建文档的唯一性;
如:通过mktemp命令创建文件
管道
管道:用于“过滤处理”、“特殊处理”、“扩展处理”
1)符号形式“|”
2)管道是不能单独使用的,必须配合指令一起使用(本质就是辅助作用)
//管道可理解为分界线。管道前面的输出就是后面指令的输入
如:查询根目录下包含“y”字母的文档名称
如:统计某个目录下的文档的总数
xargs命令(x arguments):给其他命令传递参数的过滤器
指令格式:xargs 选项 命令
1)无命令,则默认命令是echo
选项 | 含义 |
---|---|
-n | 执行命令使用几个参数 |
-p | 执行每个命令都询问是否执行 |
-e | 设置结束字符 |
-0 | 将特殊字符还原成一般字符 |
如:通过id命令查询/etc/passwd文件中前三个用户的信息
1)xargs会将通过管道输出信息中的换行符和空格符都替换为空格符
//很多命令都不支持管道,但可通过xargs了提供命令参数实现单行多个命令
格式化
文件
join命令:根据两个文件指定相同的字段进行连接
指令格式:join 选项 文件路径1 文件路径2
选项 | 含义 |
---|---|
-t | 指定数据的分隔符 |
-i | 忽略大小写 |
-1 | 指定文件1的字段 |
-2 | 指定文件2的字段 |
1)默认以两个文件的第1个字段进行比较
//字段:每行数据中被分隔符分割的数据
如:将文件/etc/passwd和文件/etc/group整合
//因为GID在/etc/passwd中第4个栏位,在/etc/group中第三个栏位
paste命令:将多个文件按照队列进行合并
指令格式:paste 文件1 文件N
1)不论文件的内容是否相同,都会按照行数进行合并
split命令:以大小/行数把一个文件分割成多个数据
指令格式:split 选项 文件路径 前缀名
选项 | 含义 |
---|---|
-b | 以文件大小分割数据 |
-l | 以行数分割文件 |
1)文件被分割后,其名为:前缀名aa、前缀名ab、前缀名ac以此类推
//若没有前缀名,则默认以aa、ab、ac命名以此类推
2)分割后原文件还会被保存
如:将/root/etc/passwd文件按10行分割并保存到/root/test文件夹下
格式
tr命令:修改数据中的指定字符
指令格式1:tr 选项 字符 //修改字符
选项 | 含义 |
---|---|
-d | 删除数据中的关键词 |
-s | 删除连续重复的字符以,且保留一个 |
指令格式2:tr 原字符 目标字符 //替换字符
如:使用tr调整echo的输出
expand命令:将数据中的跳格符(Tab)转换成空格符
指令格式:expand 选项 文档路径
选项 | 含义 |
---|---|
-t | 定义一个Tab按键等于多少空白字符 (默认是8个字符) |
1)unexpand命令实现的效果则相反(用法相同)
col命令:调整输入/输出内容
指令格式:col 选项
选项 | 含义 |
---|---|
-x | 以多个空格符代替跳格符(Tab) |
-b | 删除所有的控制字符(包括RLF和HRLF) |
uniq命令:显示/忽略数据中的重复行(默认忽略)
指令格式:uniq 选项
选项 | 含义 |
---|---|
-i | 忽略大小写 |
-c | 显示重复出现的次数 |
-d | 仅显示重复出现的行列 |
1)一般与sort命令结合使用
输出
grep命令:查找数据中的含有关键词的数据并输出
指令格式:grep 选项 关键词 文档路径
1)grep在查到关键词后是以行为单位截取数据进行输出;
2)egrep命令是grep命令的升级版,其支持POSIX扩展正则表达式;
选项 | 含义 |
---|---|
-a | 将二进制文件以文本文件的方式查找数据 |
-c | 计算含有关键词的行数 |
-i | 忽略大小写的不同 |
-n | 输出行号 |
-v | 查找不含有关键词的数据 |
-E | 支持扩展表达式 |
sort命令:将文件中数据进行排序并输出
指令格式:sort 选项 文件路径
选项 | 含义 |
---|---|
-f | 忽略大小写 (默认将大写字母排在前面) |
-b | 忽略行首的空格 |
-n | 将数字以数字形式进行排序 (默认将数字当作字符形式进行排序) |
-M | 以月份进行排序 |
-r | 反向排序 |
-t | 指定数据的分隔符(分隔符需用‘’括起来) |
-k | 指定以那个区间进行排序 |
1)默认是以ASCII码值比较进行排序,且排序的字符与语系的编码有关
2)-t和-k一起使用才有意义(类似cut的-d和-f)
echo命令:将指定字符串或变量提取后的值输出到终端
指令格式:echo 字符串或${变量}
1)若字符串中含有空格,则需通过双引号括起来;
2)若字符串中含有单引号或双引号时,需使用不同的引号括起来
//使用单引号时,使用双引号括起来(反之,使用单引号括起来)
如:输出Hello,World和SHELL变量内容到终端
如:输出带有引号的内容到终端
printf命令:格式化并输出结果到stdout
指令格式:printf ‘输出格式’ 打印内容
格式 | 含义 |
---|---|
%s | 字符串格式输出 |
%i | 整数格式输出 |
%f | 浮点数格式输出 |
%% | 输出% |
1)printf不属于管道命令
2)存在一些特殊转义字符(键盘无法输入)使用特使格式代替
特殊格式 | 含义 |
---|---|
\a | 输出警告声音 |
\b | 退格 |
\f | 清楚屏幕 |
\n | 输出新的一行 |
\r | 下一行(回车键) |
\t | 水平Tab按键 |
\v | 垂直Tab按键 |
如:格式换输出/root/test/test1.txt文件内容
命令 | 区别 |
---|---|
printf | Ksh内置命令,支持正则表达式 不自动换行 |
Bash内置命令 自动换行 |