shell编程值之正则表达式与字符截取(6)
正则表达式与通配符
- 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式
- 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持政策表达式,所以只能使用shell自己的通配符来进行匹配了
通配符
- 匹配任意内容
? 匹配任意一个内容
[] 匹配中扣号中的一个字符
正则表达式
略
字符截取命令
1 cut字段提取命令
cut [选项]文件名
选项:
-f 列号: 提取第几列
-d 分隔符: 按照指定分隔符分割列
cut -f 2 student.txt
cut -f 2,4 student.txt
cut -d ":" -f 1,3 /etc/passwd
2 printf命令
printf '输出类型输出格式' 输出内容
输出类型:
%ns : 输出字符串。n是数字只带输出几个字符
%ni : 输出整数。n是数字指代输出几个数字
%m.nf: 输出浮点数。m和n是数字,指代输出的整数位和小数位 如 %8.2f代表共输出8位数,其中2位是小数,6位是整数
3 awk命令
awk `条件1{动作1} 条件2{动作2}...` 文件名
条件 (pattern):
一般使用关系表达式作为条件
x>10判断变量 x是否大于10
x>=10大于等于
x<=10小于等于
动作(action)
格式化输出
流程控制语句
awk `{print $2 "\t" $4 "\n"}` student.txt
df -h | awk `{print $1 "\t" $3}`
4 sed命令
sed的是流编程器的缩写。它是文本处理中不可获取的工具。ser主要是用来将数据进行选取、替换、删除、新增的命令。
sed [选项]`[动作]` 文件名
选项:
-n 一般sed命令会把所有数据都输出到屏幕,如果加入此选择则只会把经过sed命令处理的行输出到屏幕
-e 允许对输入数据应用多条sed命令编辑
-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a : 追加,当前行后添加一行或多行
c :行替换,用c后面的字符串替换原数据行
i :插入,在当期行前插入一行或多行。d:删除,删除指定的行
p :打印,输出指定的行
s : 字符串替换,用一个字符串替换另外一个字符串。格式为"行范围s/旧字符串/新字符串/g"
sed '2p' student.txt 查看文件的第二行
sed -n '2p' student.txt
字符串替换
sed 's/旧字串/新字串/g' 文件名
sed '3s/60/99/g' student.txt
在第三行中,把60替换成90
sed -i '3s/60/99/g' student.txt
在第三行中,把60替换成90并直接写入文件
sed -e 's/fengj//g;s/cang/g' student.txt
同时把'fengj' 和 'cang' 替换为空
sort命令与wc命令
####### 1 排序命令sort
sort[选项] 文件名
-f 忽略大小写
-n 以数值型进行排序,默认使用字符串型排序
-r 反向排序
-t 执行分隔符,默认是分隔符是制表符
-k n[,m] 按照指定的字段范围排序,从第n字段开始,m字段结束(默认到行尾)