3.2 文本处理工具

grep

grep: Globally search a Regular Expression and Print

即全局搜索正则表达式并输出显示.

grep的操作对象为加载在内存中的文件,所以不会修改文件本身.

默认情况下grep命令使用的是标准正则,也可以通过参数使用扩展正则表达式.

grep				##默认为标准正则表达式
grep -E = egrep		##使用扩展正则表达式
##常用参数
-i			##忽略大小写
-E			##使用扩展正则表达式
-n			##显示匹配的行的同时显示行号
-5			##显示过滤行及其上下5行的内容
-B5			##显示过滤行及其上方5行的内容 Before
-A5			##显示过滤行及其下方5行的内容 After
-v			##反向过滤

默认的正则匹配为贪婪模式,也就是只要字符串中出现了要检索的部分就判断为符合要求.

system包含sys,如果检索syssystem字段也会被检索出来.

当然,也可以让检索更严格.

##指令基本格式
grep 匹配条件 处理文件

##参数示例
grep root passwd				##过滤显示passwd文件中含有root的行
grep ^root passwd				##过滤显示root开头的行
grep root$ passwd				##过滤显示root结尾的行
grep -i root passwd				##过滤显示passwd文件中包含root的行,root不局限于大小写
grep -e '\<root' passwd			##root字符之前不能有字符
grep -e 'root\>' passwd			##root字符之后不能有字符
grep -5							##显示过滤行及其上下5行的内容
grep -n							##显示过滤结果时同时显示行号
grep -v							##反向过滤输出

在这里插入图片描述
在这里插入图片描述

sed

##命令格式
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件

sed默认输出模式空间内的内容,其如果附加参数会同时输出模式空间内的内容和命令处理后的内容,造成内容冗余.

-n		##不输出模式空间内的内容

对字符的处理

p		##显示
sed -n 5p passwd		##显示passwd文件的第5行内容
sed -n 3,5p passwd		##显示passwd文件的第3-5行内容
sed -ne '3p;5p' passwd	##显示passwd文件的第3行和第5行内容
sed -ne '5,$p' passwd	##显示passwd文件的第五行以后的内容
sed -n '/^s/p' passwd	##显示passwd文件中以s开头的行

d		##删除
		##删除操作本身就是对模式空间中的内容进行操作
		##如果-n就没有输出了,因此不需要添加-n参数
sed 5d passwd			##删除passwd文件第5行
sed '/^s/d' passwd		##删除passwd文件中以s开头的行
sed '/^s/!d' passwd		##删除passwd文件中除了s开头的行以外的所有行
sed -e '5,$d' paaswd	##删除passwd文件第5行以后的所有内容

a		##添加
sed -e '$a hello world' passwd		##在passwd文件的结尾添加'hello world'
sed -e '$a hello\n world' passwd	##在passwd文件的结尾添加'hello(换行)world'
sed -e '/^s/a hello world' passwd	##在passwd文件的s开头的行的行尾添加'hello world'

c		##整行替换
sed -e '/^s/c hello world' passwd	##将passwd文件的s开头的行替换为hello world
sed '5chelloworld' passwd 			##将passwd文件的第5行替换为hello world

w		##将符合的行写入到指定文件中
sed '/^sys/w TestFile' passwd		##将passwd文件中sys开头的行筛选出来写入到TestFile文件

i		##插入
sed '5ihello world' passwd			##在passwd文件的第5行开头插入hello world

r		##整合
sed '1r TestFile' passwd			##读取passwd,追加写入到TestFile的第一行后,之后跟TestFile的其他内容,两文件融合显示

sed 字符替换
sed 's/:/###/g'	passwd				##将文件中所有的:替换为###
sed 's/:/###' passwd				##没有g,意思为将文件中每一行的第一个:替换为###
sed '1,5s/:/###/g' passwd			##将第1-5行的:替换为###
sed '1s/:/###/g' passwd				##将第1行的:替换为###
sed '1s/:/###/g;5s/:/###/g' passwd	##两条命令并列执行,将第1行和第5行的:替换为###
sed '/lp/,/halt/s/:/###/g' passwd	##将从lp所在行到halt所在行中所有的:替换为###
sed 's/\//####/g' passwd			##将文件中所有的/替换为####
									##因为/在sed命令中本身有分割作用
									##因此使用\对其进行转义,写作'\/'
sed 's@/@####@g' passwd				##sed命令中的/也可以用@代替
									##因此这一条的作用与上条相同

上述操作对是对模式空间中的内容进行操作,并不会对文件产生影响.

如果需要将操作/改动保存到文件,需要额外添加-i参数.

将操作结果保存到文件

sed 's/:/####/g' -i TestFile		##将TestFile中的所有:替换为####后保存到文件

AWK

AWK是一种处理文本文件的语言,是一个强大的文本分析工具,也可以叫做报告生成器.

awk -F 分割符 *BEGIN{} {} END{}

BEGIN{}表示开始时执行的命令

{}表示需要执行生成的命令

END{}表示结束前执行的命令

NR			##行数
NF			##列数
FILENAME	##文件名称本身
Test		##Test变量的值
"Test"		##Test字符串

条件判断的相关内容

/bash$/				##条件,bash结尾的行
/bash$|root/		##以bash结尾的行 或 包含root的行,或逻辑
/bash$/||/root/		##与上一行表意相同
/bash$/&&/root/		##包含root 且 以bash结尾的行,与逻辑

$0		##所有的列
$1		##第1列
$2		##第2列

~		##是
!~		##不是

##由此可以举例
$9~		##第9列是
$7~!	##第7列不是

awk -F : '{print $1}' passwd
显示输出`passwd`文件中的第1列内容

awk -F : '$7!~/\bin/bash/{print $0}' /etc/passwd
显示输出`etc/passwd`文件中第7列不是`/bin/bash`的整行内容

示例

[root@Node1 Desktop]# cat passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
gnome-initial-setup:x:977:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
rngd:x:976:974:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
westos:x:1000:1000:westos:/home/westos:/bin/bash
[root@Node1 Desktop]# awk -F : '$7~/\/bin\/bash$/{print $0}' passwd 
root:x:0:0:root:/root:/bin/bash
westos:x:1000:1000:westos:/home/westos:/bin/bash

awk的基础用法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值