文本处理工具

目录

一. grep 

1. grep 格式 

​ 2. grep字符数量匹配规则

​ 二. sed  

1. 命令格式

2. 对字符的处理

a) p##显示

​ b) d##删除

c) a##添加

​ d) c##替换

​ e) w##把符合的行写到指定文件中

​f) i##插入

​  g) r##整合文件

​3. sed 字符替换

​三. awk

1. 使用方法


一. grep 


 grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep -E = egrep
 

1. grep 格式 


grep 匹配条件 处理文件

grep root passwd            ##过滤root关键字
grep ^root passwd           ##以root开头
grep root$ passwd           ##以root结尾
grep -i root passwd         ##后略大小写
grep -E "\<root" passwd     ##root字符之前不能有字符
grep -E "root\>" passwd     ##root字符之后不能有字符
grep -数字                  ##显示过滤行以及上面几行和下面几行
grep -n                     ##显示匹配的行所在行号
grep -A                     ##显示过滤行以及下面几行
grep -B                     ##显示过滤行以及上面几行
grep -v                     ##反向过滤



 
2. grep字符数量匹配规则

^westos              ##以westos开有
westos$              ##以westos结尾
w....s               ##w开头s结尾中间4个任意字符
.....s               ##s结尾前面5个任意字符
*                    ##字符出现0到人一次
?                    ##0到1此
+                    ##1到任意此
{n}                  ##n此
{m,n}                ##m到n次
{0,n}                ##0-n次
{,n}                 ##0-n次
{m,}                 ##最少m次
(lee){2}             ##lee字符串出现2次



 
练习脚本:
请显示系统中能被su命令切换的用户名称


 
二. sed  

       sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

1. 命令格式


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

2. 对字符的处理

 

a) p##显示

-ne表示多行策略

sed -n  5p westos         ##显示第五行
sed -n  3,5p westos       ##显示3到5行
sed -ne  "3p;5p westos    ##显示3和5行
sed -ne 1,5p westos       ##1-5行
sed -ne '5,$p'westos      ##5到最后一行
sed -n '/^#/p' fstab      ##显示以#开头的行


 
b) d##删除

sed 5d westos                 ##删除第五行
sed '/^#/d'fstab              ##把#开头的行删除
sed '/^UUID/!d' fstab         ##除了UUID以外的行都删除
sed -e '5,$d' westos          ##由第5行删到最后

c) a##添加

sed -e '$a hello world' fstab
sed -e '$a hello\nworld' fstab
sed -e '/^#/a hello world' fstab


 
d) c##替换

sed -e '/^#/c hello world' fstab
sed '5chello world' westos


 
e) w##把符合的行写到指定文件中

sed '/^UUID/w westofile' westos       ##把westos中UUID开头的行写入westosfile中


f) i##插入

sed '5ihello westos' westos


 
 
g) r##整合文件

sed '5r haha' westos


3. sed 字符替换

s表示全文

sed 's/:/###/g' westos                     ##将每一行第一个出现的:替换为###
sed 's/:/###/' westos                      ##将所有的:替换为###
sed '1,5s/:/###/g' westos                  ##将1到5行的:替换为###
sed '1s/:/###/g' westos                    ##将第一行的:替换为###
sed '1s/:/###/g;5s/:/###/g' westos         ##将第一行和第五行的:替换为###
sed '/lp/,/shutdown/s/:/###/g' westos      ##将lp到shutdown之间的:替换为###
sed 's/\//####/g' westos                   ##将所有的/替换为####
sed 's@/@####@g' westos                    ##将分隔符号用@代替,避免出现错误
sed 's@/@####@g' -i  westos                ##把sed处理的内容保存到westos文件中

练习及脚本
Apache_port.sh
此脚本后介入数字
http的端口就改为此数字
假设selinux为关闭状态


三. awk

        awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

1. 使用方法

awk -F 分隔符(默认不加F的情况下,分隔符为空格)BEGIN{}{}END{} FILENAME
NR         ## 行数
NF         ## 列数
FILENAME   ## 文件名称本身
test        ## test变量值
"test"      ## test字符串
 
/bash$/           ## 条件
/条件1|条件2/      ## 条件1或者条件2
/条件1/||/条件2/   ## 条件1或者条件2
/条件1/&&/条件2/   ## 条件1并且条件2
 
$0   ## 所有的列
$1   ## 第一列
$2   ## 第二列
$6   ## 第六列

统计一个文件的行数

注:N初始值为0,操作为N++,最后打印出N的值 passwd为查询的文件

awk -F : '{print NF}' passwd            ## 分隔符为:,打印每行有多少列
awk '{print NR}' passwd                 ## 默认分隔符为空格,打印行号
awk -F : '/bash$/{print NF}' passwd     ## 分隔符为:,打印以bash结尾的行有多少列
awk '/^root/{print}' passwd             ## 默认分隔符为空格,打印以root开头的行内容
awk '/nologin$/{print FILENAME}' passwd ## 以nologin结尾的行,有多少行就打印多少个FILENAME

awk -F : '/bash$/||/csh$/{print $1}' passwd   ## 两个条件,以bash或csh结尾的
awk -F : '/bash$|csh$/{print $1}' passwd      ## 一个条件
awk -F : '/^root/&&/bash$/{print $1}' passwd  ## 以 root开头并且以bash结尾的

awk -F : '$6!~/home/&&/bash$/{print}' passwd  ## 表示/etc/passwd文件第6列没有home关键字,并且以bash结尾的行

awk脚本练习
统计系统中能通过su切换的并且用户家目录不在/home下的用户数量

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值