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内置命令,支持正则表达式 不自动换行
print Bash内置命令 自动换行
posted @ 2022-02-06 15:25  爱和可乐的w  阅读(44)  评论(0编辑  收藏  举报