注:转载请标明原文出处链接: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