匹配指定内容的div_「Linux学习」档案内容处理

6d6d19e58a2a5fb46cb3cbf036d5da38.png

对于查阅到的档案内容,一般上我们需要过滤掉无用的信息,从其中提取出我们需要的部分。常用命令有:

grep 用来查询满足指定条件的数据

sed 主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等

awk 主要是以列为单位进行处理

一、grep搜索文本

1.命令格式:

grep [选项] 模式 [文件...]

2.命令功能:

搜索文本的匹配内容,逐行搜索所指定的文件或标准输入,并显示匹配模式的每一行。

3.命令参数:

-b显示块号

-c仅显示各指定文件中包含模式的总行数

-i模式中字母不区分大小写

-h不将包含模式的文件名显示在该行上

-l仅显示包含模式的文件名

-n显示模式所在行的行号

-s指定文件若不存在或不可读,不提示错误信息

-v显示所有不包含模式的行

-w 精确查找

正规表达式可以是:

. 匹配任意一个字符

*匹配0个或多个*前的字符

^匹配行开头

$匹配行结尾

[]匹配[ ]中的任意一个字符,[]中可用 - 表示范围,

例如[a-z]表示字母a 至z 中的任意一个

转意字符

4. 使用实例:

实例1:

ls -l grep Jun 匹配所有有Jun 的行 ls -l grep .*Jun 匹配在Jun之前有任意字符的行 ls -l grep -c Jun 统计满足条件的总行数 ls -l grep -n Jun 在匹配行前输出其在档案中的行数

输出:

bfdc3a13a2b9e258d74ae81cca6b30ec.png

实例2:

grep -c “^$” aa.txt #统计aa.txt中的空行总数grep “$” aa.txt # 显示包含$ 字符的行,grep -i “jun” aa.txt #忽视大小写,查找包含jun的行ls -l grep -v Jun #显示不匹配模式的行ls -l grep -E “Jun Jul” #显示匹配Jun或Jul模式的行

二、sed 对行匹配

1.命令格式:

sed [选项] 命令 [文件...]

2.命令功能:

主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作

3.命令参数:

-n∶使用安静(silent)模式,显示经过sed 特殊处理的那一行(或者动作)

-i∶直接修改读取的档案内容,而不是由萤幕输出。

-e: 多个匹配

常用命令:

= 显示文件行号

a 在定位行号后附加新文本信息,附加

d 删除定位行,删除

g 全局替换

i 在定位行号后插入新文本信息,插入

p 打印匹配行

q 第一个模式匹配完成后推出或立即推出

r 从另一个文件中读文本

s 使用替换模式替换相应模式

w 写文本到一个文件

4. 使用实例:

实例1:

sed -n '2p' quote.txt #只打印第二行sed -n '1,3p' quote.txt #打印1-3行sed -n '3,$p' quote.txt #打印3到最后一行,$为最后一行的意思 sed -n '/Neave/'p quote.txt #打印匹配单词Neave的行sed -n '/$/'p quote.txt #查询包含$的行,特殊字符前需要使用转义字符'' 屏蔽其特殊含义 sed -e '/music/=' quote.txt #打印所有内容,并在匹配行前一行打印行号。 sed -n '/music/=' quote.txt #只打印匹配行号。= 显示出行号sed -n -e '/music/p' -e '/music/=' quote.txt #打印匹配行和行号sed '1,$d' quote.txt #删除1到最后一行,原始文件不变,只是显示在屏幕上的字符没有这些行而已sed '/company/d' quote.txt #匹配删除sed 's/night/NIGHT/' quote.txt #用NIGHT替换第一个匹配的nightsed 's/night/NIGHT/g' quote.txt #用NIGHT替换全部匹配的nightsed 's/$//' quote.txt #将字符$删除,因为没有用任何字符来替换sed -n 's/nurse/"Hello" &/p' quote.txt #修改模式后带 &,将其放在匹配模式之前sed 's/[0-9][0-9]*/& Passed/g' une.txt #修改模式前带&,将其放在匹配模式之后, 可以理解为& 是为匹配模式占位sed '1,2 w send.out' quote.txt #将1,2行内容写入send.out,w写sed '/good/ w send.out' quote.txt #将匹配行内容写入send.out sed '/.a.*/q' quote.txt #查询模式首次出现行,并退出sed -i '/world/s/jint/jjjjjjj/g' test.shcat dos.txt sed 's/^0*//g' sed 's/^M//g' sed 's/##//g'#将dos.txt文件,删除行首的任意个0,删除控制字符,并用空格替换## 

三、awk 对列匹配

1.命令格式:

awk [-F field-separator] 'commands' input-file(s)

2.命令功能:

能够依照用户定义的格式来分解输入的资料也可以依照用户定义的格式来打印资料。

3.命令参数:

-F 指定列分割符,默认用空格为分割符

$0 打印整行

$NF 打印每行的最后一个字段,$(NF-1) 倒数第二个字段

NR 打印行号

4. 使用实例:

实例1:在屏幕上输出test.txt的全部列,并将其写入wow文件中

命令:awk '{print $0}' test.txt tee wow.txt

输出:

7318fe0f6f43c590d5e82792b2fa254e.png

实例2:在屏幕上输出test.txt的行号,第一列和最后一列

命令:awk '{print NR,$1,$NF}' test.txt

输出:

c26ff57d5bf012a2c17cfa7a9032bb2a.png

实例3:

awk 'BEGIN{print"Name---------"}{print $1}END{print "end-of reports"}' une.txt #在屏幕上加入报告头,和信息尾awk '{if($4~/good/)print $1}' grade.txt #将第四列与good匹配,打印匹配行的第一列awk '$3=="48" {print $0}' grade.txt #精确匹配,只能是48awk '{if($3~/48/) print $0}' grade.txt #模糊匹配,第三列有48即可awk 'END {print NR}' grade.txt #查看整个记录的总行数awk '{print NF,NR,$0}END{print FILENAME}' grade.txt #NF记录的总列数,NR 行数,$0 全部列,并在结尾处添上 文件名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值