linux之基础符号详解(中)

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

1.正则表达式(regular expression-RE)
练习的模拟环境:

1
2
3
4
csharp复制代码cat >>oldboy.txt<<EOF
I am oldboy!
I teach linux
EOF

基础正则表达式 - basic regular expression - BRE
1)^ — 以什么开头的信息找出来

1
2
3
4
5
6
7
8
9
csharp复制代码测验一:找出以m开头的文件内容信息
grep '^m' oldboy.txt

grep命令特点:按行进行操作处理(过滤)
如何给grep命令匹配出来的信息标记颜色
给grep命令设置一个别名
alias grep='grep --color=auto' 临时设置
echo "alias grep='grep --color=auto'">>/etc/profile 永久设置
[root@fu ~]# source /etc/profile 加载

2)$ — 找出以什么什么结尾的信息过滤出来

1
2
3
csharp复制代码测验练习二:找出以m结尾的内容信息
[root@fu ~]# grep 'm$' oldboy.txt
my blog is http://oldboy.blog.51cto.com

3)^$ – 找寻匹配空行信息(进行过滤)

测验练习题三:过滤空行信息

1
2
3
4
csharp复制代码[root@fu ~]# grep -v '^m$' oldboy.txt   -v == !

I am oldboy !
I teach linux

4). – 匹配任意一个字符信息且只能是一个字符信息(无法匹配空行信息)

1
csharp复制代码grep '.' oldboy.txt

5)* – 匹配0个或1次以上连续的字符信息(表示前一个字符连续出现1次或0次以上)

1
2
3
4
5
csharp复制代码grep '0*' oldboy.txt
什么叫匹配了0次??

会匹配出文件找不到内容,预支匹配
默认会将所有内容都显示出来

6).* — 匹配文件中的所有内容(可以匹配空行信息)
grep ‘.*‘ oldboy.txt

测验xx:请找出文件中以m开头,一行中所有信息

1
2
3
csharp复制代码[root@fu ~]# grep '^m.*' oldboy.txt

mygod ,i am not oldboy,but OLDBOY!

测验xx:请找出文件中以m开头,到m字符终止匹配

1
2
3
csharp复制代码[root@fu ~]# grep '^m.*m' oldboy.txt

mygod ,i am not oldboy,but!
  1. \ – 转移符号(中文–英文 英文–中文)
    作用:
    可以将有意义的符号,转换成没有意义 .
    可以将没有意义的符号,转换成有意义的 \n
    .(匹配任意字符)– . –加个撬棍一个点表示字符信息 – . –取消转译

测验练习题:将下面文件中一行信息,转换成一列显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
csharp复制代码01 02 03 04 05

01
02
03
04
05
tr "要进行替换的信息" "替换成什么信息" alex.txt

[root@fu ~]# tr " " "\n" <alex.txt 空格替换成换行符号
01
02
03
04
05
  1. [^abc] – 排除/不匹配 指定字符信息
1
2
3
4
5
6
csharp复制代码[root@fu ~]# grep "[^a-z]" oldboy.txt
I am oldboy !
I teach linux

[root@fu ~]# grep "^[^a-z]" oldboy.txt 不要以小写字母开头的句子
I am oldboy

测验xx:找出以.结尾的相应行的信息
grep ‘.$’ oldboy.txt

扩展正则表达式 - extended regular expression - ERE

    • — 匹配1个或1次以上连续的字符信息
1
2
3
4
csharp复制代码[root@fu ~]# egrep '0*' --color  oldboy.txt

I am oldboy !
[root@fu ~]# egrep '3*' --color oldboy.txt

9)[]+ 组合的用处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
csharp复制代码[root@fu ~]# grep "[0-9]" oldboy.txt -o
5
1
4
9
0
0
0
4
4
8
4
9
0
0
0
0
0
4
4
8
[root@fu ~]# grep "[0-9]" oldboy.txt
my blog is sss
[root@fu ~]# grep "[0-9]+" oldboy.txt
[root@fu ~]# egrep "[0-9]+" oldboy.txt

not 4900000448

10)| 表示匹配多个满足条件的信息(彼此之间是或者关系)
egrep ‘o|y|t’ oldboy.txt

11)() 匹配一个整体信息(字符串信息) [a,usgduagd] 匹配中括号里面的一个一个元素信息

1
2
3
4
5
6
7
8
9
10
11
12
scss复制代码  表示匹配一个整体消息  egrep 'oldb(o|e)y' 表示过滤整体信息
表示用于后项引用前项 sed -r 's#(.*)#</1>#g' 利用sed命令实现后项引用前项
sed -r 's#([0-9]+)#<\1>#g'利用sed命令实现后项引用前项
sed -r 's#(12)(34)(56)#<\1><\2><\3>#g'利用sed命令实现后项引用前项



[root@fu ~]# egrep 'oldb[oe]y' oldboy.txt
I am oldboy teacher!
[root@fu ~]# egrep 'oldb(oe)y' oldboy.txt
[root@fu ~]# egrep 'oldb(o|e)y' oldboy.txt
I am oldboy teacher!

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%