Shell基础之正则表达式

正则表达式与通配符

  • 通配符
    • *0个或一个或多个
    • ?任意一个
    • []括号中的一个
  • 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配,grep、awk、sed等命令可以支持正则表达式
  • 通配符用来匹配符合条件的文件名,通配符是完全匹配,ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配

几个典型事例

  • *前一个字符匹配0次或任意多次
    • "a*"是无意义的,会把所有匹配出来,包括空白行,匹配所有内容
    • "aa*"最少一个a,匹配至少包含一个a的行
    • "aaa*"匹配最少两个连续a的字符串
  • .匹配除了换行符外任意一个字符(类似?)
    • "s..d"s和d这两个字母之间有两个字符的单次
    • "s.*d"s和d这两个字母之间有任意字符
    • ".*"匹配所有内容
  • ^行首
  • $行尾
  • []匹配中括号中指定的任意一个字符,值匹配一个字符
  • [^]取反
  • \转义

几个典型应用

  • 匹配日期格式 YYYY-MM-DD
[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
复制代码
  • 匹配IP地址
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
复制代码

cut [选项] 文件名

  • -f 列号:提取第几列
  • -d 分隔符:按照指定分割符分割列
grep "/bin/bash" /etc/passwd | grep -v "root" | cut -f 1 -d ":"
复制代码

但是 df -h 不适用,cut只适用特别规律的数据

awk '条件1{动作1}条件2{动作2}...' 文件名

  • 条件
    • 一般使用关系表达式作为条件
    • x > 10判断变量x是否大于10
  • 动作
    • 格式化输出
    • 流程控制语句
IDNamegenderMark
1furongF85
2fengjF60
3cangF70
awk '{printf $2 "\t" $4 "\n"}' student.txt

//  监控系统资源
df -h | grep "/dev/sda5" | awk '{print $5}' | cut -d "%" -f 1

awk 'BEGIN{print "test"}{print $2 "\t" $4}' student.txt

awk 'END{print "test"}{print $2 "\t" $4}' student.txt

cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}'

cat student.txt | grep -v Name | awk '$4>=70{print $2}'
复制代码

sed [选项] '[动作]' 文件名

  • 选项
    • -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
    • -e:允许对输入数据应用多条sed命令编辑
    • -i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
  • 动作
    • -a:追加,在当前行后添加一行或多行
    • -c:行替换,用c后面的字符串替换原始数据行
    • -i:插入,在当前行前插入一行或多行
    • -d:删除,删除指定的行
    • -p:打印,输出指定的行
    • -s:字符串替换,用一个字符串替换另外一个字符串,格式为"行范围s/旧字串/新字串/g"(和vim中的替换格式类似)

sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。

//只看第二行
sed -n '2p' student.txt
//删除第二行到第四行的数据,但不修改文件本身
sed '2,4d' student.txt
//在第二行后追加hello
sed '2a piaoliang jiushi rexing' student.txt
//在第二行前插入两行数据
sed '2i meinv' student.txt
//替换第二行数据
sed '2c furong bu ji ge' student.txt

sed '4s/70/100/g' student.txt
复制代码

sort [选项] 文件名

  • -f:忽略大小写
  • -n:以数值型进行排序,默认使用字符串型排序
  • -r:反向排序
  • -t:指定分隔符,默认的分隔符是制表符
  • -k n[,m]:按照指定的字段范围排序。从第n个字段开始,m字段结束(默认到行尾)
#排序用户信息文件
sort /etc/passwd
#反向排序
sort -r /etc/passwd
#只用第三个字段排序
sort -n -t ":" -k 3,3 /etc/passwd
复制代码

wc [选项] 文件名

  • -l:只统计行数
  • -w:只统计单词数
  • -m:只统计字符数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值