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内置命令 自动换行 |

浙公网安备 33010602011771号