LINUX学习笔记
Shell脚本_正则表达式
1. 正则表达式与通配符
2. 基础正则表达式
3. 支持正则表达式的命令
1. 正则表达式与通配符
- 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep, awk, sed等命令可以支持正则表达式
- 通配符(*:匹配任意字符, ?:匹配任意一个字符, [ ]:匹配中括号中指定的任意一个字符)用来匹配符合条件的文件名,通配符是完全匹配。Ls, find, cp 这些命令不支持正则表达式,所以只能使用shell自己的通配符进行匹配。
2. 基础正则表达式
3. 支持正则表达式的命令
1). 字符截取命令
-
Grep命令
在文件中提取符合条件的行 -
Cut字段提取命令
在文件中提取符合条件的列
命令格式:cut [选项] 文件名
选项:
-f 列号:提取第几列
-d分隔符:按照指定分隔符分割列
默认分隔符是制表符,“Tab”键
例子1:
例子2:
注意:cut一般与grep命令通过管道符的形式联合使用
例子3:
Cut命令的局限:如果是用空格作为分隔符,cut命令不能识别,可以使用awk命令
df -h 命令:查看分区的使用状况 -
Awk命令
在文件中提取符合条件的列Printf命令
-
格式化输出命令
-
命令格式:printf ‘输出类型输出格式’ 输出内容
-
输出类型:
%ns: 输出字符串。N是数字,指代输出几个字符
%ni: 输出整数。N是数字,指代输出几个数字
%m.nf: 输出浮点数。M和n是数字,指代输出的整数位和小数位数。如%8.2f代表共输出8位数,其中2位小数,6位整数. -
输出格式:
注意:
如果不加引号,则认为所有的字符串为一个整体,且无任何格式
如果不加引号,且输入多个输出类型,则只识别第一个输出类型,其余的视为字符串
加单引号或者双引号,才被视为输出类型定义
加单引号或者双引号,并且定义输出格式
Printf命令不能直接加文件名,也不能加管道符执行前一个命令的执行结果.
-
Awk命令的输出中,支持print和printf命令:
- Print:print会在每个输出之后自动加入一个换行符(linux默认没有print命令),只能在awk命令中用,不能在linux系统中用.
- Printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,则需要手动加入换行符
Awk命令
-
命令格式:awk’条件1{动作1} 条件2{动作2}…’文件名
-
条件(pattern):
一般使用关系表达式作为条件
x>10 判断变量x是否大于10
x>=10 大于等于
x<=10 小于等于 -
动作(action)
格式化输出:printf
流程控制语句:if, for… -
例子1
例子2:与管道符搭配使用,且输出文件有空格为分隔符,使用print命令
例子3:与grep命令一起搭配管道符使用
BEGIN命令
- 命令格式:awk ‘BEGIN{printf ”This is a transcript\n”}{printf$2”t”$6”\n”}’student.txt
- 含义:在所有的数据读取之前,处理printf”This is a transcript\n”,然后再处理printf$2”t”$6”\n”
- 例子:
FS内置变量
- 命令格式:cat /etc/passwd | grep”/bin/bash” | \awk’BEGIN{FS”:”}{printf$1”\t”$3”\n”}’
- FS内置变量,指定分隔符;awk默认的分隔符是空格和制表符tab
- 注意:Awk在执行时,先读入第一行数据,然后再执行条件.
- 例子1:
例子2:
END命令
- 命令格式:awk’END{printf”The End\n”} {printf$2”\t”$6”\n”}’ student.txt
- 含义:在所有命令执行完之后,执行END条件后的动作{printf”The End\n”}
关系运算符
- 命令格式:cat student.txt|grep -v Name|\awk’$6>=87{printf$2”\n”}’
- 命令含义:读取student.txt文件的内容,然后选择不包含Name的行,然后如果第6列的数据大于等于87,输出第2列
- 例子:
sed命令
-
sed是一种几乎包括在所有UNIX平台(包括linux)的轻量级流编辑器。主要用来将数据进行选取,替换,删除,新增的命令.不仅能够修改文件,而且可以搭配管道符,修改文件操作的结果。
-
Vi编辑器,只能修改文件内容,不能直接修改文件操作的结果,如果想修改,需要将结果写入另一个vi编辑器。
-
命令格式:sed [选项]‘[动作]’文件名
-
选项:
-n: 一般sed命令会把所有数据抖输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕上
-e:允许对输入数据应用多条sed命令编辑,条件之间用;分隔开
-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出 -
动作:
-
字符串替换
-
命令格式:sed’s/旧字串/新字串/g’文件名
-
例子
参考资料:兄弟连linux视频 Thanks ^^
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~