文章目录
  1. 1. 正则表达式
    1. 1.1. 正则表达式与通配符
      1. 1.1.1. 通配符
      2. 1.1.2. 正则
      3. 1.1.3. 基础正则表达式
  2. 2. 字符截取命令
    1. 2.1. cut字段提取命令
    2. 2.2. printf命令
    3. 2.3. awk命令
    4. 2.4. sed命令
  3. 3. 字符处理命令
    1. 3.1. sort命令
    2. 3.2. wc命令

本章讲述在Shell编程中,正则表达式的用法。正则表达式适用于当前大部分语言。

正则表达式

用于字符串分割、匹配、查找、替换。

正则表达式与通配符

通配符

1
2
3
* : 匹配任意字符
? : 匹配任意一个字符
[]: 匹配括号中的任意一个字符。
  • 通配符用来匹配符合条件的文件名。
  • 通配符是完全匹配。
  • ls,find,cp这些命令不支持正则表达式,所以只能用shell自己的通配符来进行匹配。

正则

  • 正则用来匹配文件中符合条件的字符串。
  • 正则是包含匹配。
  • grep,awk,sed等命令可以支持正则表达式。

基础正则表达式

元字符 作用
* *的前一个字符匹配0次或多次
. 匹配除了换行符以外的任意一个字符
^ 匹配行首
$ 匹配行尾
[] 匹配括号中指定的任意一个字符
[^] 匹配除括号中指定字符外的任意一个字符
\ 转义符,用于将特殊符号的含义取消
\{n\} 表示其前面的字符恰好出现n次
\{n,\} 表示其前面的字符出现不小于n次
\{n,m\} 表示其前面的字符最少出现n次,最多出现m次
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
28
29
30
31
32
grep "a*" test.txt
匹配test.txt文件中的a字符出现0次或多次,即匹配所有内容,包括空白行。(该正则无任何意义)
grep "aa*" test.txt
匹配test.txt文件中的a字符至少出现1次的行。
grep "aaaaa*" test.txt
匹配test.txt文件中至少包含4个连续的a的字符串。
grep -n "^$" test.txt
匹配test.txt文件中的空白行。(-n用来显示行号,第几行)
grep "^[^a-z]" test.txt
匹配test.txt文件中,不以小写字母开头的行。
grep "^[^a-zA-Z]" test.txt
匹配test.txt文件中,不以字母开头的行。
grep "\.$" test.txt
匹配test.txt文件中,使用"."结尾的行。
grep "a\{3\}" test.txt
匹配test.txt文件中,"a"字母连续出现3次及以上的行。
grep "[0-9]\{3\}" test.txt
匹配test.txt文件中,包含连续三个数字及以上的行。
[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
匹配日期格式YYYY-MM-DD
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
匹配IP地址

字符截取命令

cut字段提取命令

1
2
3
4
5
6
7
cut [选项] 文件名
选项:
-f 列号:提取第几列
-d 分隔符:按照指定分隔符分割列
例:
cut -f 1 -d ":"
截取第1列中,以":"作为分隔符的行

printf命令

1
2
3
4
5
6
7
8
9
10
11
12
13
printf '输出类型输出格式' 输出内容
⊙ 输出类型:
- %ns:输出字符串。n是数字指代输出几个字符。
- %ni:输出整数。n是数字指代输出几个数字。
- %m.nf:输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数。
⊙ 输出格式:
- \a:输出警告声音
- \b:输出退格键,也就是Backspace键
- \f:清除屏幕
- \n:换行
- \r:回车,也就是Enter键
- \t:水平输出退格键,也就是Tab键
- \v:垂直输出退格键,也就是Tab键

awk命令

1
2
3
4
5
6
7
8
9
awk '条件1{动作1}条件2{动作2}...' 文件名
⊙ 条件(Pattern)
- 一般使用关系表达式作为条件
- x>10判断变量x是否大于10
- x>=10大于等于
- x<=10小于等于
⊙ 动作(Action)
- 格式化输出
- 流程控制语句

sed命令

主要用来将数据进行选取、替换、删除、新增。

1
2
3
4
5
6
7
8
9
10
11
12
sed [选项] '[动作]' 文件名
⊙ 常用选项:
- -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
- -e:允许对输入数据应用多条sed命令编辑
- -i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
⊙ 动作:
- a:追加,在当前行后添加一行或多行
- c:行替换,用c后面的字符串替换原数据行
- i:插入,在当前行前插入一行或多行
- d:删除,删除指定的行
- p:打印,输出指定的行
- s:字符串替换,用一个字符串替换另外一个字符串。格式为"行范围s/旧字符串/新字符串/g" (和vim中的替换格式类似)
1
2
3
4
5
sed -n '2p' test.txt
# 查看文件第二行内容
sed '2,4d' test.txt
# 删除第2行到第4行的内容,但不改变源文件内容,只是显示在屏幕上的内容是被删除后的。 加 -i 会改变源文件内容。

字符处理命令

sort命令

1
2
3
4
5
6
7
sort [选项] 文件名
选项:
- -f:忽略大小写
- -n:以数值型进行排序,默认使用字符串型排序
- -r:反向排序
- -t:指定分隔符,默认分隔符为制表符
- -k n[,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
1
sort /etc/passwd

wc命令

统计命令

1
2
3
4
5
wc [选项] 文件名
选项:
- -l:只统计行数
- -w:只统计单词数
- -m:只统计字符数

本章完!

文章目录
  1. 1. 正则表达式
    1. 1.1. 正则表达式与通配符
      1. 1.1.1. 通配符
      2. 1.1.2. 正则
      3. 1.1.3. 基础正则表达式
  2. 2. 字符截取命令
    1. 2.1. cut字段提取命令
    2. 2.2. printf命令
    3. 2.3. awk命令
    4. 2.4. sed命令
  3. 3. 字符处理命令
    1. 3.1. sort命令
    2. 3.2. wc命令