您的位置:首页 - 教程 - Linux - 正文
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:只统计字符数


评论: