注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/106505009
1 正则表达式
1.1 什么是正则表达式
正则表达式是用于描述字符排列和匹配模式的一种语法规则,主要用于字符串的模式分割、匹配、查找及替换操作
1.2 正则表达式与通配符的区别
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。
grep、awk、sed等命令可以支持正则表达式。
通配符用来匹配符合条件的文件名,通配符是完全匹配。
ls、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配。
1.3 基础正则表达式

1.3.1 符号“*”
通过命令 vim .bashrc 添加命令 alias grep=’grep --color=auto’ 来将匹配的内容用颜色标记出来(起别名)。

然后使用命令 source .bashrc 将文件生效(让别名生效)。
使用命令:grep “a*” test.txt 结果如下图所示,可以看出,所有内容全部显示,匹配到字符a的内容用颜色被标记出来。

使用命令:grep “a*” test.txt 结果如下图所示,可以看出只有a匹配到的结果显示出来。

(1) “a*” 表示匹配所有内容;
(2) “aa*” 表示匹配至少包含有一个a的行;
(3) “aaa*” 表示匹配最少包含两个连续a的字符串;
(4) “aaaa*” 表示匹配最少包含四个连续a的字符串;
执行各个命令结果对比如下图所示:

1.3.2 符号“.”
符号“.”表示匹配除了换行符外任意一个字符。
例如:
(1) “s..d” 表示匹配在s和d这两个字母之间一定有两个字符的字符串。
(2) “s.*d” 表示匹配在s和d这两个字母之间任意字符的字符串

1.3.3 符号“^”和符号“$”
符号“^”表示匹配行首,符号“$”表示行尾。
例如:
“^m”表示匹配以m开头的行;“n$”表示匹配以n结尾的尾;“^$”表示匹配空白行;

1.3.4 符号“[]”
符号“[]”表示匹配中括号中指定的任意一个字符,仅匹配一个字符。
例如:
“s[ao]id”表示匹配字母s和字母i中是a字符或o字符的字符串;“[0-9]”表示匹配任意一个数字;“^[a-z]”表示匹配用小写字母开头的行;“^[^a-z]”表示匹配不同小写字母开头的行;“^[^a-zA-Z]”匹配不同字母开头的行;


1.3.5 符号“\”
符号“\”表示转义符
“\.$” 表示匹配使用”.”结尾的行

举例说明匹配日期和IP地址
假设日期格式为YYYY-MM-DD
匹配时间的命令为: grep -n "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" test.txt
匹配IP地址的命令为:grep -n "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" test.txt

2 字符截取命令
2.1 cut命令
cut命令格式为: cut 选项 文件名
其中选项参数及其作用分别为:
-f 列号表示提取第几列;-d 分隔符表示按照指定分隔符来分割列;

默认以制表位为分隔,如需要以其他字符作为分隔,需要用-d选项,如下图所示,以“:”作为分隔。

2.2 printf命令
printf命令格式为: printf ‘输出类型输出格式’ 输出内容
其中输出类型参数有:
%ns表示输出字符串,n是数字表示输出n个字符;%ni输出整数,n是数字表示输出n个数字;%m.nf输出浮点数,m是数字表示输出的整个数的位数,n是数字表示输出小位数。例如%8.2f表示共输出8位,其中小数是2位,整数是6位。
其中输出格式参数有:
\a表示输出警告声音;\b表示输出退格键(Backspace键);\f表示清除屏幕;\n表示换行;\r表示回车;\t表示水平输出退格键(Tab键);\v表示垂直输出退格键(Tab键);



注:在awk命令的输出中支持print和printf命令。
print :print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行需要手工加入换行符。

2.3 awk命令
awk命令格式为: awk ‘条件1{动作1} 条件2{动作2}…’ 文件名
其中条件参数有:
一般使用关系表达式作为条件;
(1) x>10判断变量 x是否大于10
(2) x>=10判断变量 x是否大于等于10
(3) x<=10判断变量 x是否小于等于10
其中动作参数有:
(1) 格式化输出
(2) 流程控制语句



2.4 sed命令
sed是一种几乎包括在所有Linux/UNIX平台的轻量级流编辑器。
sed主要是用来将数据进行选取、替换、删除、新增的命令。
sed命令格式为:sed 选项 ‘动作’ 文件名
(1) 其中选项参数及作用为:
- -n 表示一般sed命令会把所有数据都输出到屏幕,如果-n选项,则会把经过sed命令处理的行输出到屏幕。
- -e 表示允许对输入数据应用多条sed命令编辑。
- -i 表示用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。
(2) 其中动作选项及其作用分别为:
- a 表示在当前行后添加一行或多行;
- c 表示行替换,用c后面的字符串替换原始数据行;
- i 表示在当期行前插入一行或多行;
- d 表示删除指定的行;
- p 表示输出指定的行;
- s 表示用一个字符串替换另外一个字符串。格式为: “行范围s/旧字符串/新字符串/g”
举例说明:
(1)执行命令:sed -n '2p' test.txt 查询文件中第二行数据

(2)执行命令:sed '2d' test.txt 删除文件中第二行的数据,原始文件数据不删除。
执行命令:sed '1,,3d' test.txt 删除文件中第1行至第3行的数据,原始文件数据不删除。

(3)执行命令:sed '1s/ab1/sb1/g' test.txt 替换字符串,但原始文件数据不变。

需要改变原始文件数据,需要加入选项 -i 即可

3 字符处理命令
3.1 sort命令
sort命令用于排序,其命令格式为:sort 选项 文件名
其中选项参数及其作用分别为:
-f表示忽略大小写;-n表示数值型进行排序,默认使用字符串型排序;-r表示反向排序;-t表示指定分隔符,默认是分隔符是制表符;-k n[,m]表示按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾部);
举例说明:
执行命令: sort /etc/passwd 结果按字母从小到大排序

执行命令: sort -r /etc/passwd 结果按字母从大到小排序。

3.2 wc命令
wc命令用于统计,其命令格式为:wc 选项 文件名
其中选项参数及其作用分别为:
- -l 表示只统计行数;
- -w 表示只统计单词数;
- -m 表示只统计字符数;

参考资料
[1] shell编程之正则表达式
转载:https://blog.csdn.net/zaishuiyifangxym/article/details/106505009