shell编程值之正则表达式与字符截取(6)

时间:2022-07-28 07:27:52

正则表达式与通配符

  • 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。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字段结束(默认到行尾)