shell中的文本处理
发布日期:2022-02-12 16:06:52 浏览次数:5 分类:技术文章

本文共 3654 字,大约阅读时间需要 12 分钟。

shell中的文本处理

1.grep

筛选出一个文档

在这里插入图片描述

grep 文本过滤命令

grep -E = egrep #扩展正则表达式
grep #正则表达式
grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行–由正则表达式或者字符及基本文本字符所编写的过滤条件。
grep 的格式
grep 匹配条件 处理文件
例如
grep root passwd
在这里插入图片描述
grep ^root passwd #root为开头

grep root$ passwd #root为结尾

在这里插入图片描述
grep -i root passwd #忽略大小写
在这里插入图片描述
grep -E “root|ROOT” passwd
在这里插入图片描述

-v 显示除按命令搜索到的其他信息

在这里插入图片描述
-n 显示行号
在这里插入图片描述
-nX 显示上下X行的信息,并标注行号

-X 显示上下X行的信息

在这里插入图片描述
-AX 显示下X行的信息

-BX 显示上X行的信息

在这里插入图片描述
grep 中字符的匹配次数设定
/* 字符出现 [0- 任意次 ]
在这里插入图片描述
? 字符出现 [0-1 次 ]
在这里插入图片描述

/+字符出现 [1- 任意次 ]

在这里插入图片描述
{n} 字符出现 [n 次 ]
在这里插入图片描述
在这里插入图片描述

{m,n} 字符出现 [ 最少出现 m 次,最多出现 n 次 ]

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

{0,n} 字符出现 [0-n 次 ]

在这里插入图片描述
{m,} 字符出现 [ 至少 m 次 ]

(xy){n}xy 关键字出现 [n 次 ]

.* 关键字之间匹配任意字符

在这里插入图片描述
grep 中字符的匹配位置设定
^ 关键字 #关键字在开头
关键字 $ #关键字在结尾
< 关键字 #防止前几个字节贪婪

关键字 > #防止后几个字节贪婪

< 关键字 > #防止贪婪

2.sed

sed 行编辑器

用来操作纯 ASCII 码的文本
处理时 , 把当 前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) 可以指定仅仅处理哪些行:sed 符合模式条件的处理 不符合条件的不予处理。处理完成之后把缓冲区的内容送往屏幕,接着处理下一行 , 这样不断重复 , 直到文件末尾。
sed 对字符的处理
p 显示
sed -n 3p fstab #显示第3行的内容

sed -n ‘/#/p’ fstab #显示带有#的行的信息

在这里插入图片描述
sed -n ‘/#/!p’ fstab #显示除了带有#的行的其他行信息

sed -n ‘/UUID$/p’ fstab #显示以UUID结尾的行的信息

sed -n ‘/^UUID/p’ fstab #显示以UUID开头的行的信息
sed -n ‘2,6p’ fstab #显示2到6行的信息

sed -n ‘2,6!p’ fstab #显示除了2到6行的其他行信息

sed -n ‘2p;6p’ fstab #显示第2行和第6行的信息

d 删除

sed ‘/^UUID/d’ /etc/fstab #显示除了以UUID开头的其他行的信息

sed ‘/^#/d’ /etc/fstab #显示除了以#开头的其他行的信息

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

sed ‘/^ $/d’/etc/fstab #显示除了以 $开头的其他行的信息

sed ‘1,4d’/etc/fstab #显示除了第1行到第4行的其他行的信息
在这里插入图片描述

sed ‘1d;4d’/etc/fstab #显示除了第1行和第4行的其他行的信息

在这里插入图片描述
sed ‘/^UUID/!d’ /etc/fstab #显示以UUID开头的行的信息
在这里插入图片描述
a 添加(下面添加)
sed ‘/^UUID/ahello westos’ /etc/fstab #在以UUID开头的行的下一行添加hello westos
在这里插入图片描述
sed ‘/^UUID/ahello\nwestos’ /etc/fstab #在以UUID开头的行的下两行添加hello和westos
在这里插入图片描述
i 插入(上面添加)
sed ‘/^UUID/ihello\nwestos’ /etc/fstab #在以UUID开头的行的上两行插入hello和westos
在这里插入图片描述

在这里插入图片描述

c 替换
sed ‘/^UUID/chello westos’ /etc/fstab #将以UUID开头的行替换成hello westos
sed ‘/^#/chello westos’ /etc/fstab #将以#开头的行替换成hello westos
在这里插入图片描述
w 写入
sed ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab #显示fstab的内容并将以UUID开头的行写入w后的文件中
在这里插入图片描述
sed -n ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab ##不显示fstab的内容,且将以UUID开头的行写入w后的文件中
在这里插入图片描述
sed ‘/^UUID/=’/etc/fstab #在以UUID开头的行的上一行加行号

sed ‘6r /etc/issue’ /etc/fstab #将/etc/issue中的信息加在第6行的后面

在这里插入图片描述

sed的其他用法

sed -n ‘/^UUID/=’ fstab #显示以UUID开头的行的行号

sed -n -e ‘/^UUID/p’ -e ‘/ ^UUID/=’ fstab #显示以UUID开头的行的信息并加上行号

sed -e ‘s/brown/green/;s/dog/cat/’ data #-e和;的作用一样,都是将两行命令一起执行,将data中的brown换成green,dog换成cat

sed -f rulesfile file #对file执行rulefile中写的命令
sed ‘s/#//g’/etc/fstab #将文件中的#换成空,并显示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
sed ‘s@/@##@g’/etc/fstab #将文件中的/换成##,并显示
在这里插入图片描述
sed ‘s///#/’/etc/fstab #将每一行的第1个/换成#,并显示

sed ‘s///#/g/’/etc/fstab #将所有的/换成#,并显示

在这里插入图片描述
在这里插入图片描述
sed ‘G’ data #在文件中的每一行后再加一个空行
在这里插入图片描述
sed ’ $!G’ data #在文件中的每一行后再加一个空行,最后一行不加
在这里插入图片描述
sed ‘=’ data | sed ‘s/\n/ /’ #在每一行的上一行添加一个空行,且显示本行的行号
在这里插入图片描述
sed ‘=’ data | sed ‘N; s/\n/ /’ #在每一行之前加上行号,并显示;N:读取本行时,一共读取两行
在这里插入图片描述
sed -n ’ $p’ data #显示文件的最后一行

3.awk

awk 报告生成器

awk 处理机制 :awk 会逐行处理文本 , 支持在处理第一行之前做一些准备工作 , 以及在处理完最后一行做一些总结性质的工作 , 在命令格式上分别体现如下 :
BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作
{}: 逐行处理 , 逐行读入文本执行相应的处理 , 是最常见的编辑指令块
END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果
awk 基本用法
linux 上面默认使用 gawk
awk ‘{print FILENAME}’ passwd #在每一行显示文件名字

awk ‘{print 第 “NR” 行 , 有 “NF” 列 }’ #显示行数和列数

在这里插入图片描述

在这里插入图片描述

awk ‘BEGIN{print NAME}’ #在显示第一行加上NAME

awk ‘END{print WESTOS}’ #在显示最后一行加上WESTOS

awk -F : ‘BEGIN{print NAME}{print $1}END{WESTOS}’ #在显示第一行加上NAME,在显示最后一行加上WESTOS,以:为分隔符显示第一列

awk ‘/bash $/’ #显示以bash为结尾的行的信息

在这里插入图片描述
awk -F : ‘/bash $/{print $1}’ #以:为分隔符显示以bash为结尾的行的第一列
在这里插入图片描述
显示除了以nologin为结尾的行的其他行的第一列:

awk ‘BEGIN{a=34;print a+12}’ #初始值为34,显示34+12的值

awk -F : ‘/^ro/{print}’ /etc/passwd #显示以ro为开头的行的信息
awk -F : ‘/^ [a-d]/{print $1,$6}’ passwd.txt #显示以abcd为开头的行的以:为分隔符的第一列和第六列
awk -F : ‘/^a|nologin $/{print $1,$7}’ passwd.txt #显示以abcd为开头,以nologin为结尾的行的以:为分隔符的第一列和第七列
awk -F : ‘$6~/bin $/{print $1,$6}’ #显示以:为分隔符的第六列是bin的行的第一列和第六列
awk -F : ‘$7!~/nologin $/{print $1,$7}’ passwd.txt #显示以:为分隔符的第七列不是nologin的行的第一列和第七列

截取eth0的ip

在这里插入图片描述

转载地址:https://blog.csdn.net/weixin_45426401/article/details/99758395 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:shell脚本中常用的命令
下一篇:Apache服务

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月23日 00时05分43秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章