shell编程-正则表达式
1.正则表达式是什么
它主要用于字符串的模式分割,匹配,查找及替换操作。
2、正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则包含匹配。grep,awk,sed等命令可以支持正则表达式。
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls ,find,cp这些命令不支持正则表达式,所以只能使用shell自己的通配符进行匹配了。
3.基础正则表达式
.相当于通配符的?
[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\
3.字符截取命令
cut [选项] 文件名
-f 列号:提取第几列
-d:分隔符:按照指定分隔符分割列,默认分隔符是tab键(制表符)
ID name gender Make
1 nyan n 89
2 luke l 87
3 mak n 67
cut -f 1,3 student.txt
grep "/bin/bash" /etc/passwd | grep -v "root" | cut -f 1 -d ":"
printf '输出类型输出格式' 输出内容
输出类型:
%ns:输出字符串。n是数字指代输出几个字符
%ni:输出整数。n是数字指代输出几个数
%m.nf:输出浮点数.m和n指代输出整数位和小数位位数
printf不支持管道符,所以printf $(cat 2.txt)
awk '条件1{动作1}条件2{动作2}...' 文件名
条件Pattern:
一般使用关系表达式作为条件:>,<>=,<=
动作Action:
格式化输出
流程控制语句
awk '{printf $2 "\t" $4 "\n"}' student.txt
BEGIN: awk 'BEGIN{print "test"}{print $2 "\t" $4}' student.txt
FS内置变量: cat /etc/passwd |grep /bin/bash |awk '{FS=":"}{print $1 "\t" $3}'
如果没有加BEGIN,则是先读取数据赋值给指定变量$n,再告诉FS是":"作为分隔符,此时已晚。
cat /etc/passwd |grep /bin/bash |awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
sed字符替换命令
sed [选项] '[动作]' 文件名
-n:一般sed命令会把所有数据输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
-e:允许对输入数据应用多条sed命令编辑
-i:用sed修改结果直接修改读取数据的文件,而不是有屏幕输出。
动作:
a:追加,在当前行后添加一行或多行
c:行替换,用c后面的字符串替换源数据行
i:插入,在当前行插入一行或多行。
d:删除指定行
p:打印,输出指定的行
s:字符串替换,用一个字符串替换另外一一个字符串。格式为 "行范围s/旧字符串/新字符串/g"
sed -n '2p' student.txt
sed '2a 3 f v m' student.txt
sed '2,4d' student.txt
前面数字是行号
4.字符处理命令
sort [选项] 文件名
-f:忽略大小写
-n:以数值型进行排序,默认使用字符串型排序
-r:反向排序
-t:指定分隔符,默认是分隔符是制表符
-k n[,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
sort -n -t ":" -k "3,3" /etc/passwd
wc:统计命令
wc [选项] 文件名
-l:只统计行数
-w:只统计单词数
-m:只统计字符数