linux三剑客
Linux通配符
通配符
就是键盘上一些特殊字符,可以实现特殊功能,例如,模糊搜索。
Linux下常用通配符
符号 | 作用 |
---|---|
* | 匹配任意,0个或多个字符,字符串 |
? | 匹配一个字符,有且只有一个字符 |
[abcd] | 匹配abcd中任意一个字符,abcd也可以是不连续任意字符 |
[a-z] | 匹配a到z之间任意一个字符,要求连续字符,也可以是连续数字[1-9] |
[!abcd] | 不匹配括号中的任意一个字符,也可以书写[!a-d] |
[^abcd] | 同上,!可以换成^ |
Linux下特殊通配符
符号 | 作用 |
---|---|
[[:upper:]] | 所有大写字母 |
[[:lower:]] | 所有小写字母 |
[[:alpha:]] | 所有字母 |
[[:digit:]] | 所有数字 |
[[:alnum:]] | 所有的字母和数字 |
[[:space:]] | 所有空白字符 |
[[:punct:]] | 所有标点符号 |
特殊引号
在linux系统中,单引号,双引号可以用于表示字符串。
名称 | 解释 |
---|---|
单引号’ ’ | 所见即所得,强引用,单引号内容会原样输出 |
双引号" " | 弱引用,能够识别何种特殊符号,变量,转义符等,等解析后在输出结果 |
没有引号 | 一般连续字符串,数字,路径可以省略双引号,遇见特殊字符,空格,变量等,必须加上双引号 |
反引号`` | 常用于引用命令结果,同于$(命令) |
其他特殊符号
符号 | 解释 |
---|---|
; | 分号,命令分隔符或结束符 |
# | 1.文件中的注释内容 2。root身份提示符 |
| | 管道符,传递命令结果给下一个命令 |
$ | 1.$变量,取出变量的值 2.普通用户身份提示符 |
\ | 转义字符,将特殊含义的字符还原成普通字符 |
{} | 1.生成序列号 2.引用变量作为变量与普通字符的分割 |
逻辑操作符
逻辑符既可以在linux系统中用,也可以在bash脚本中用。
命令 | 解释 |
---|---|
&& | 前一个命令成功,在执行下一个命令 |
|| | 前一个命令失败了,在执行下一个命令 |
! | 1.在bash中取反 2.在vim中强制性 3.历史使命中!ls找出最近一次以ls开头的命令 |
Linux正则表达式
正则表达式(Regual Expression,REGEXP)由一类特殊字符以及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能。
分两类:
- 基本正则表达式:BRE
- 扩展正则表达式:ERE
基本正则表达式BRE集合
- 匹配字符
- 匹配次数
- 位置锚定
符号 | 作用 |
---|---|
^ | 尖角号,用于模式的最左侧,如"^good",匹配以good单词开头的行 |
$ | 美元符,用于模式的最右侧,如"good$",匹配以good结尾的行 |
^$ | 组合符,表示空行 |
. | 匹配任意一个且只有一个字符,不能匹配空行 |
* | 匹配前一个字符(连续出现)0次或1次以上,重复0次代表空,即匹配所有内容 |
.* | 组合符,匹配任意长度的任意字符 |
^.* | 组合符,匹配以任意多字符开头的内容 |
.*$ | 组合符,匹配以任意多个字符结尾的内容 |
[abc] | 匹配[]集合内的任意一个字符 |
[^abc] | 匹配除了^后面的任意字符,^表示对[abc]的取反 |
<\pattern> | 匹配完整的内容 |
< 或 > | 定位单词的左侧和右侧 |
扩展的正则表达式ERE
字符 | 作用 |
---|---|
+ | 匹配前一个字符1次或多次,前面的字符至少出现1次 |
[: /]+ | 匹配括号内的":“或者”/"字符一次或多次 |
? | 匹配前一个字符0次或1次,前面的字符可有可无 |
| | 表示或者,同时过滤多个字符串 |
() | 分组,被括起来的内容表示一个整体 |
a{n,m} | 匹配前一个字符最少n次,最多m次 |
a{n,} | 匹配前一个字符最少n次 |
a{n} | 匹配前一个字符正好n次 |
a{,m} | 匹配前一个字符最多m次 |
Tips
grep命令需要使用参数 -E即可以支持正则表达式
egrep不推荐使用,使用grep -E替代
grep不加参数,得在特殊字符下面加""反斜杠,识别为正则
三大命令(三剑客)
grep
作用:文本搜索工具,根据用户指定的模式(过滤条件),对目标文本逐行进行匹配检查,打印匹配到的行
语法:
grep [options] [pattern] file
命令 参数 匹配模式 文件数据
grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式
参数选项 | 解释说明 |
---|---|
-v | 排除匹配结果 |
-n | 显示匹配行与行号 |
-i | 不区分大小写 |
-c | 只统计匹配的行数 |
-E | 使用egrep命令 |
–color=auto | 为grep过滤结果添加颜色 |
-w | 只匹配过滤的单词 |
-o | 只输出匹配的内容 |
sed
注意sed和awk使用单引号,双引号有特殊解释
sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。它是操作,过滤和转换文本内容的强大工具。常用的功能包括结合正则表达式对文件实现快速的增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串),取行(取出指定行)。
语法:
sed [选项] [sed内置命令字符] [输入文件]
选项:
参数选项 | 解释 |
---|---|
-n | 取消默认sed的输出,常与sed内置命令p一起用 |
-i | 直接将修改结果写入文件,不用-i,sed修改的是内存数据 |
-e | 多次编辑,不需要管道符了 |
-r | 支持正则扩展 |
sed的内置命令字符用于对文件进行不同的操作功能,如对文件的增删改查。
sed常用内置命令字符:
sed的内置命令字符 | 解释 |
---|---|
a | append,对文本追加,在指定行后面添加一行/多行文本 |
d | delete,删除匹配行 |
i | insert,在指定行前添加一行/多行文本 |
p | print,打印匹配行的内容,通常p与-n一起用 |
s/正则/替换内容/g | 匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配 |
sed匹配范围
范围 | 解释 |
---|---|
空地址 | 全文处理 |
单地址 | 指定文件某一行 |
/pattern/ | 被模式匹配到的每一行 |
范围区间 | 10,20 十到二十行,10,+5第十行向下5行,/pattern1/,/pattern2/ |
步长 | 1~2,表示1,3,5,7,9行,2~2,表示2,4,6,8,10行 |
awk
awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel表的样式。awk早期在Unix上实现,我们用的awk是gawk,是GNU awk的意思,awk更是一门编程语言,支持条件判断,数组,循环等功能。
语法:
awk [option] ‘pattern{action}’ file…
awk 参数 条件动作 文件
- Action指的是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是print和printf
awk是按行处理文件,一行处理完毕,处理下一行,根据用户指定的分割符去工作,没有指定则默认空格。
awk内置变量
内置变量 | 解释 |
---|---|
$n | 指定分隔符后,当前记录的第n个字段 |
$0 | 完整的输入记录 |
FS | 字段分隔符,默认为空格 |
OFS | 输出字段分隔符 |
RS | 输入记录分隔符(输入换行符),指定输入时的换行符 |
ORS | 输出记录分隔符(输出换行符),指定输出时的换行符 |
NF(Number of fields) | 分割后,当前行一共有多少个字段,即列数 |
NR(Number of records) | 当前处理文本行的行号 |
FNR | 各文件分别计数的行号 |
FILENAME | 当前文件名 |
ARGC | 命令行参数的个数 |
ARGV | 数组,保存的是命令行所给定的各参数 |
更多的内置变量可以man手册 | man awk |
- awk必须外层单引号,内层双引号,内置变量$1,$2都不得添加双引号,否则会识别为文本,尽量别加引号。
awk参数
参数 | 解释 |
---|---|
-F | 指定分割字段符 |
-v | 定义或修改一个awk内部的变量 |
-f | 从脚本文件中读取awk命令 |
awk模式的关系运算符
关系运算符 | 解释 | 示例 |
---|---|---|
< | 小于 | x<y |
<= | 小于等于 | x<=y |
== | 等于 | x==y |
!= | 不等于 | x!=y |
>= | 大于等于 | x>=y |
> | 大于 | x>y |
~ | 匹配正则 | x~/正则/ |
!~ | 不匹配正则 | x!~/正则/ |
awk格式化
- print:{print}只能对文本简单的输出,并不能美化或修改格式,默认添加换行符。
- printf:{printf}可以对文本进行格式化的输出,规则和c语言中printf一样,需要自己添加换行符
awk模式pattern
awk是按行来处理文本,上面讲解了print动作,现在讲解特殊的pattern:BEGIN和END
- BEGIN模式是处理文本之前需要执行的操作
- END模式是处理完所有行之后执行的操作
awk命令使用正则表达式,必须把正则表达式放入"//"双斜杠中