[created_at:2020-05-24]
什么是Linux三剑客与管道
1.grep:根据正则表达式查找相关内容并打印对应的数据
2.awk:可以根据定位到的数据行处理其中的分段
3.sed:stream editor 流式编辑器的简称,可以定位数据行并对数据进行增删改查操作
4.Linux提供管道符“|”将两个命令隔开,管道符左边命令的输出作为管道符右边命令的输入
- grep 相当于 SQL 的 select *from table,它可以进行数据的查找与定位。
- awk 相当于 SQL 的 select field from table,它可以进行数据切片。
- sed 相当于 SQL 的 update table set field=new where field=old,它可以对数据进行修改。
- 正则表达式可以相当于 SQL 的where条件
什么是正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符("元字符"/限定符)组成的文字模式。
附 正则表达式教程
类型 | 代码 | 说明 |
---|---|---|
基本表达式 | ^开头$结尾 | 匹配一个字符串 |
[a-z][0-9] | 匹配字符的范围区间 | |
. | 匹配除换行符以外的任意字符 | |
常用元字符 | \w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 | |
\d | 匹配数字 | |
\b | 匹配单词的开始或结束 | |
^ | 匹配字符串的开始 | |
$ | 匹配字符串的结束 | |
常用限定符 | * | 重复零次或更多次 |
+ | 重复一次或更多次 | |
? | 重复零次或一次,非贪婪匹配 | |
{n} | 重复n次 | |
{n,m} | 重复n到m次 | |
() | 分组 | |
x|y | 匹配x或y |
匹配以字母a开头的单词
匹配刚好6个字符的单词
grep
grep:根据正则表达式查找相关内容并打印对应的数据
查找包含root字符串的数据行grep -n root test.txt
查找不包含root字符串的数据行grep -nv root test.txt
[root@iZm5Z learndir]# cat test.txt
root
nroot
abcroot
abcde
abcef
root rootbk
rootroot
[root@iZm5Z learndir]# grep -n root test.txt
1:root
2:nroot
3:abcroot
6:root rootbk
7:rootroot
[root@iZm5Z learndir]# grep ^root$ test.txt
root
[root@iZm5Z learndir]# grep -n ^root$ test.txt
1:root
[root@iZm5Z learndir]# grep -nv root test.txt
4:abcde
5:abcef
awk
awk:可以根据定位到的数据行处理其中的分段
awk 命令的基本格式如下:awk '[条件1] {动作 1} [条件 2] {动作 2} …' 文件名
- 条件(Pattern):
一般使用关系表达式或者正则表达式作为条件。 - 动作(Action):
格式化输出;
流程控制语句; - 数据分段:$0代表整行数据,$n代表第n列数据,通常以空格来进行分列
[root@iZm5Z learndir]# awk '{print $0}' 3.txt
a1 b1 c1
a2 b2 c2
a3 b3 c3
[root@iZm5Z learndir]# awk '{print $2}' 3.txt
b1
b2
b3
sed
sed:定位数据行并对数据进行增删改查操作
sed 命令形式
sed [-hn<基本命令>][-e<script>][-f<script文件>][文本文件]
在第4行后新增一行:sed -e '4 a newline' test.txt
在第4行前新增一行:sed -e '4 i newline2 test.txt'
打印第二行:sed -n '2p' test.txt