linux课堂笔记(3)正则表达式

正则表达式是什么

正则表达式是用于描述字符排列和匹配模式的一种语法规则。
它主要用于字符串的模式分割、匹配、查找及替换操作,其中最为重要作用是匹配。

正则表达式与通配符

正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。

正则表达式是包含匹配,即文件中的语句中包含了查找的字符串,那么就显示整行语句。

通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。
在这里插入图片描述
基础正则表达式
在这里插入图片描述

字符截取命令

cut字段提取命令
cut [options] 文件名 options:
-f 列号:提取第几列
-d 分隔符:按照指定分隔符分隔列,默认制表符是分隔符

// 截取第一列,分割符是空格
cut -f 1 -d ’ ’ test.txt
// 截取第一列和第二列
cut -f 1,2 test.txt
// 截取第一列到第三列
cut -f 1-3 test.txt
// 在/etc/passwd中提取普通用户的信息,并删除该用户
#userdel $(grep “/bin/bash” /etc/passwd |grep -v “root” |cut -f 1 -d “:”)

// cut无法以空格做分隔符
#df -h|cut -f 1,2 -d " "
Filesystem
/dev/xvda1
devtmpfs
tmpfs
tmpfs
tmpfs

printf命令
prinf ‘输出类型 输出格式’ 输出内容
输出类型:

  • %ns:输出字符串。n是数字指代输出几个字符
    -%ni:输出整数。n是数字指代输出几个数字
    -%m.nf:输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f%共输出8位数,其中2位是小数,6位是整数
    输出格式:
    -\a:输出警告声音
    -\b : 输出退格键,也就是Backspace键
    -\f : 清除屏幕
    -\n : 换行
    -\r :回车,也就是Enter键
    -\t : 水平输出退格键,也就是Tab键
    -\v : 垂直输出退格键,也就是Tab键

#printf 1 2 3 4 5
1 //print 1
#printf %s 1 2 3 4 5
12345
#printf %s %s %s 1 2 3 4 5
%s%s12345
#printf ‘%s %s %s’ 1 2 3 4 5 // 所有内容都必须指定格式
1 2 34 5 6

//printf打印文件内容
#printf ‘%s\t%s\t%s\t%s\n’ $(cat stu.txt)
ID Name gender Mark
1 furong F 85
2 fengj F 60
3 cangls F 70
awk命令
#awk ‘条件1{动作1}条件2{动作2}…’ 文件名
条件(Pattern)
一般使用关系表达式作为条件
x>10判断变量x是否大于10
动作(Action)
格式化输出
流程控制语句

#cut -f 2,4 stu.txt
Name Mark
furong 85
fengj 60
cangls 70

// 输出stu.txt第2个字段和第4个字段
// awk执行流程,先读取一行,按照条件做动作,然后读取第二行…
#awk ‘{printf $2 “\t” $4 “\n”}’ stu.txt // \t、\n必须添加双引号
#awk ‘{print $2 “\t” $4}’ stu.txt // 不用添加换行

//
#df -h |awk ‘{print $5}’
Use%
5%
0%
0%
3%
0%

// print 和printf的区别,BEGIN的用法,END的用法
#awk ‘BEGIN{printf “Test” “\n”}{print $2 “\t” $4}’ stu.txt
Test
Name Mark
furong 85
fengj 60
cangls 70

awk ‘BEGIN{print “Test” }{print $2 “\t” $4}’ stu.txt
Test
Name Mark
furong 85
fengj 60
cangls 70

awk ‘{print $2 “\t” $4}END{print “Test”}’ stu.txt
Name Mark
furong 85
fengj 60
cangls 70
Test

// FS指定分隔符
cat /etc/passwd|grep “/bin/bash” |awk ‘BEGIN{FS=":"}{print $1 “\t” $3}’
root 0
test 1000

// 使用条件
cat stu.txt|grep -v Name |awk ‘$4>70{print $2}’
furong

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

sed [options] ‘[动作]’ 文件名
options:
-n : 一般sed命令会把所有数据都输出到屏幕,如果加入此选项则只会把经过sed命令处理的行输出到屏幕
-e: 允许对输入数据应用多条sed命令编辑
-i : 用sed的修改结果直接修改读取数据的的文件,而不是由屏幕输出

Action:
-a : 追加,在当前行后添加一行或多行
-c : 行替换,用c后面的字符串替换原数据行
-i : 插入,在当前行前插入一行或多行。
-d : 删除,删除指定的行
-p : 打印,输出指定的行
-s : 字符串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字串/新字串/g”,替换指定范围内所有的旧字符串,不加g则只替换第一个旧字符串。(和vim中的替换格式类似)

// -n 参数
cat stu.txt|grep -v Name |awk ‘$4>70{print $2}’
ID Name gender Mark
1 furong F 85
1 furong F 85
2 fengj F 60
3 cangls F 70

#sed -n ‘2p’ stu.txt
1 furong F 85

// 删除第2行到第4行
sed ‘2,4d’ stu.txt
ID Name gender Mark

// -a参数
sed ‘2a piaoliang jiushi renxing’ stu.txt
ID Name gender Mark
1 furong F 85
piaoliang jiushi renxing
2 fengj F 60
3 cangls F 70

// 替换
sed -e ‘s/furong//g;s/fengj//g’ stu.txt
ID Name gender Mark
1 F 85
2 F 60
3 cangls F 70

常用命令

sort
sort [options] 文件名
options:
-f : 忽略大小写
-n: 以数值型进行排序,默认使用字符串型排序
-r : 反向排序
-t :指定分隔符,默认分隔符是制表符
-k n[,m]:按照指定的字段范围排序。从第n个字段开始,m字段结束(默认到行尾)

sort -t “:” -k 3,3 /etc/passwd
sort -n -t “:” -k 3,3 /etc/passwd

wc
wc [options] 文件名
options:
-l : 只统计行数
-w : 只统计单词数
-m: 只统计字符数
默认统计行数、单词数和字符数。字符数包括空格。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值