通配符与特殊符号
bash
操作环境中长用的通配
符号 | 意义 |
---|---|
* |
代表[0到无穷多个]任意字符 |
? |
代表[一定有一个]任意字符 |
[] |
代表一定有一个在括号内的字符 |
[-] |
当有减号在此字符中,代表[编码顺序内的任意字符],例如[0-9]代表0 到9 之间的所有数字 |
[^] |
若括号内第一个字符为指数符号[^] ,表时反向选择。例如[^abc] 代表,一定有一个字符,只要非a,b,c 的其他字符即可 |
bash
环境中的特殊符号
符号 | 内容 |
---|---|
# |
注释符号 |
\ |
转义字符:将[特殊字符或通配符]还原为一般字符 |
| |
管道(pipe):分隔 两个管道命令 |
; |
连续命令执行分隔符:连续命令的界定(与管道命令并不相同) |
~ |
用户的家目录 |
$ |
使用变量前导符变量之前需要加的变量替换值 |
& |
任务管理(job control):将命令变成后台任务 |
! |
[非] |
/ |
目录符号:路径分隔符 |
>、>> |
数据流重定向:输出定向,分别是替换与累加 |
‘’ | 单引号,不具有变量替换的功能 |
“” | 双引号,具有变量替换的功能 |
( ) | 在中间为子shell的起始与结束 |
{ } | 在中间为命令区块的组合 |
一、数据流重定向
数据流重新定向(redirect)是将某个命令执行后应该要出现在屏幕上的数据,将其保存到其他地方。例如文件或是设备(打印机等)
1.什么是数据流重定向
执行命令之后, 屏幕上默认会产生标准输出(STDOUT)与标准错误输出(STDERR)。
- 标准输出(STDOUT)
指的是命令执行所返回的正确信息 - 标准错误输出(STDERR)
标准错误输出可以理解为命令执行失败后,所返回的错误信息
数据流重新定向可以将standard output(简称stdout)与standard error output(简称stderr)分别传送到其他的文件或设备,分别传送所用的特殊字符如下所示: - 标准输入(stdin):代码为0,使用
<
或<<
- 标准输出(stdout):代码为1,使用
>
或>>
- 标准错误输出(stderr):代码为2,使用
2>
或2>>
2.什么时候使用数据流重新定向?
- 屏幕上的信息很重要,而且需要我们把它存下来的时候
- 后台执行中的程序,不希望它干扰屏幕正常的输出结果
- 一些执行命令可能已知错误信息时,以
[2>null]
将它丢掉 - 错误信息与正确信息需要分别输出时
3.命令执行的判断根据: ;、&&、||
cmd;cmd
(不考虑命令相关性的连续命令执行)$?(命令返回值)
与&&
或||
命令执行情况 | 说明 |
---|---|
cmd1&&cmd2 |
若cmd1 执行完毕且正确执行($?=0),则开始执行cmd2 ,反之cmd2 不执行 |
cmd1||cmd2 |
若cmd1 执行完毕且正确且为错误($?≠0),则开始执行cmd2 |
二、管道命令(pipe)
管道命令pipe与连续命令是不一样的,需要注意以下两点:
- 管道命令仅会处理标准输出,对于标准错误会予以忽略
- 管道命令必须要能够接受来自前一个命令的数据成为标准输入继续处理才可以
1.选取命令:cut、grep
下面介绍两个常用的信息选取命令
- cut
cut -d'分割字符' -f fields <==用于有特定分隔字符
cut -c 字符区间 <==用于排列整齐的信息
#选项与参数
`-d`:后面接分割字符,与`f`一起使用
`-f`:根据`-d`的分割字符将一段信息划分为数段,用`-f`取出第几段
`-c`:以字符的单位取出固定字符区间
示例1:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZ1fHR1p-1586780751510)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1586761690172.png)]
示例2(只显示第12个字符之后的数据):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iaQ8fUye-1586780751512)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1586761804497.png)]
cut
的主要用途就是将同一行里面的数据进行分解,但是在处理多空格相连的数据时,会比较吃力。
- grep
grep
是分析一行信息,若当中有需要的信息,就将该行拿出来
`grep` [-acinv] [--color=auto] `查找字符` filename
#选项与参数
`-a`:将二进制文件以文本文件的方式查找数据
`-c`:计算找到`查找字符`的次数
`-i`:忽略大小写
`-n`:顺便输出行号
`-v`:反向选择,显示出没有`查找字符`内容的那一行
示例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQmwe2tU-1586780751513)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1586770518712.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uLsXvJl7-1586780751514)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1586770638578.png)]
2.排序命令:sort、wc、uniq
- sort
sort [-fbMnrtuk] [file or stdin]
#选项与参数
`-f`:忽略大小写差异
`-b`:忽略最前面的空格字符部分
`-M`:以月份的名字来排序
`-n`:使用[纯数字]进行排序(默认是以文字的形式进行排序)
`-r`:反向排序
`-u`:uniq,相同的数据中,仅出现一行代表
`-t`:分隔符号,默认用[tab]来分割
`-k`:以哪个区间(field)进行排序。
- uniq
#可以用来对排序好的数据进行去重处理
uniq [-ic]
`-i`:忽略大小写字符的不同
`-c`:进行计数
- wc
wc
可以用来计算输出信息的整体数据
wc [-lwm]
#选项与参数
`-l`: 仅列出行
`-w`:仅列出多少字(英文字母)
`-m`:多少字符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iQPHYVHD-1586780751515)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1586775173306.png)]
3.双重定向:tee
tee
可以将数据流送到文件与屏幕(screen),输出到屏幕的功能与stdout
类似
tee [-a] file
#选项与参数
-a: 以累加的方式,将数据加入到file中
last | tee last.list | cut -d " " -f1
4.字符转换命令:tr、col、join、paste、expand
前面提到过,DOS
换行符与UNIX
换行符不同,可以使用dos2unix
与unix2dos
来完成转换,下面介绍用其他常用的字符来替代的命令
- tr
tr
用来删除信息当中的文字,或者进行文字信息的替换
tr [-ds] SET1
`-d`:删除信息当中的 SET1字符
`-s`:替换掉重复的字符
- col
#选项与参数
`-x`:将tab键转换成对等的空格键
- join
join
是用来处理两个文件之间的数据,
join [-ti12] file1 file2
#选项与参数
`-t`:join默认以空格字符分割数据,并且比对[第一个栏位]的数据,若相同,则将两条数据连城一行
`-i`:忽略大小写差异
`-1`:代表[第一个文件要用哪个栏位来分析]
`-2`:代表[第二个文件要用哪个栏位来分析]
- paste
paste [-d] file1 file2
#选项与参数
`-d`:后面可以分割字符,默认以[tab]来分割
`-`:file部分可以写成-,表示来自标准输入
- expand
#将[tab]键转成空格
- unexpand 将空格转为[tab]
5.划分命令:split
split [-bl] file PREF
#选项与参数
`-b`:后面接想要划分成的文件大小,可以加单位
`-l`:以行数来进行划分
6.参数代换:xargs
xargs
xargs
#这个参数不明白
7.关于减号的用途
某些命令需要用到文件名来进行处理时,stdin
与stdout
可以用-
来替代,举例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WVxvrQ0i-1586780751517)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1586779304393.png)]
三、重点回顾
- 学习
shell
的原因:Linux
中许多命令管理系统都是以shell
编写的 bash
的主要功能:历史命令、命令与文件补全功能、命令别名设置功能、任务管理、前台后台控制、程序化脚本、通配符env
与export
可以观察环境变量,export
可以将自定义变量转换成环境变量set
可以观察目前bash
环境下的所有变量$?
,代表前一个命令的返回值,在Linux
返回0代表执行成功- 通配符主要有:*、?、[]等
- 数据流重定向通过 >、2>、<之类的符号将输出的信息转到其他设备中
- 管道命令主要有:
cut
、grep
、sort
、wc
、uniq
、tee
、tr
、split
等等 - 管道命令的重点是:管道命令仅会处理标准输出,对于标准错误会予以忽略。
变量
$?
,代表前一个命令的返回值,在Linux
返回0代表执行成功- 通配符主要有:*、?、[]等
- 数据流重定向通过 >、2>、<之类的符号将输出的信息转到其他设备中
- 管道命令主要有:
cut
、grep
、sort
、wc
、uniq
、tee
、tr
、split
等等 - 管道命令的重点是:管道命令仅会处理标准输出,对于标准错误会予以忽略。