2-3-1 Linux三剑客与管道与正则

[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

你可能感兴趣的:(2-3-1 Linux三剑客与管道与正则)